У меня есть список целых чисел, и я хочу сгенерировать список, содержащий список всех непрерывных целых чисел.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.
Обычно, когда я говорю что-то умное, я имею в виду это как критику: по «умному» Я имею в виду «зависит от того, неочевидной особенности проблема тонким способом, который не является надежным или вообще полезным ». Это, однако, очень умно. – DSM
@DSM Он используется, чтобы быть рецептом в документации 'itertools', но, похоже, больше не может найти его там ... –
+1: что @DSM сказал. [Вот ссылка на пример подряд подряд в документах] (http://docs.python.org/2.6/library/itertools.html#examples) – jfs