def shift_bins(bins, dropped_bin):
    """
    Shift bins of consecutive numbers after a bin has been dropped.
    Example:

    shift_bins([[0, 1], [2, 3], [4, 5], [6, 7]], dropped_bin=1)

    [[0, 1], [2, 3], [4, 5]]

    :param bins: list of list of int
    :param dropped_bin: int, the bin that has been deleted from bins.
    :return: list of consecutive integer bins, preserving to the fullest extent
    possible the original bins.
    """
    if (dropped_bin == len(bins)) or (len(bins) == 1):
        return bins
    else:
        if dropped_bin == 0:
            delta = bins[0][0]

        else:
            delta = bins[dropped_bin][0] - bins[(dropped_bin - 1)][-1] - 1

        for bin_idx in range(dropped_bin, len(bins)):
            bins[bin_idx] = [idx - delta for idx in bins[bin_idx]]

    return bins