Python возвращает списки непрерывных целых чисел из списка

У меня есть список целых чисел, и я хочу создать список, содержащий список всех непрерывных целых чисел.

#I have:
full_list = [0,1,2,3,10,11,12,59]
#I want:
continuous_integers = [[0,1,2,3], [10,11,12], [59]]

У меня есть следующее, которое работает, но кажется плохим способом сделать это:

sub_list = []
continuous_list = []
for x in full_list:
    if sub_list == []:
        sub_list.append(x)
    elif x-1 in sub_list:
        sub_list.append(x)
    else:
        continuous_list.append(sub_list)
        sub_list = [x]
continuous_list.append(sub_list)

Я видел другие вопросы, свидетельствующие о том, что itertools.groupby является эффективным способом сделать это, но я не знаком с этой функцией, и у меня, похоже, возникают проблемы с написанием лямбда-функции для описания непрерывной природы.

Вопрос: есть ли лучший способ сделать это (возможно, с помощью itertools.groupby?)

Соображения: full_list будет иметь от 1 до 59 целых чисел, всегда будет отсортирован, а целые числа будут между 0 и 59.

1 ответ

Решение

Вы можете использовать следующий рецепт:

from operator import itemgetter
from itertools import groupby
full_list = [0,1,2,3,10,11,12,59]
cont = [map(itemgetter(1), g) for k, g in groupby(enumerate(full_list), lambda (i,x):i-x)]
# [[0, 1, 2, 3], [10, 11, 12], [59]]
Другие вопросы по тегам