Python – поиск инкрементных нумерованных последовательностей с пониманием списка

У меня есть последовательность чисел в списке, и я ищу элегантное решение, предпочтительно понимание списка, чтобы получить отдельные последовательности (включая одиночные значения). Я решил эту небольшую проблему, но она не очень питоновая.

Следующий список определяет последовательность ввода:

input = [1, 2, 3, 4, 8, 10, 11, 12, 17] 

Желаемый результат должен быть:

 output = [ [1, 2, 3, 4], [8], [10, 11, 12], [17], ] 

2 Solutions collect form web for “Python – поиск инкрементных нумерованных последовательностей с пониманием списка”

 >>> from itertools import groupby, count >>> nums = [1, 2, 3, 4, 8, 10, 11, 12, 17] >>> [list(g) for k, g in groupby(nums, key=lambda n, c=count(): n - next(c))] [[1, 2, 3, 4], [8], [10, 11, 12], [17]] 

Pythonic означает простой, простой код, а не однострочный.

 def runs(seq): result = [] for s in seq: if not result or s != result[-1][-1] + 1: # Start a new run if we can't continue the previous one. result.append([]) result[-1].append(s) return result print runs([1, 2, 3, 4, 8, 10, 11, 12, 17]) 
  • Python с использованием перечисления внутри списка
  • Как удалить список слов из списка строк
  • Выделение элементов из списка python с определенными индексами
  • Сопоставление списков Python для создания нескольких списков
  • Удалите четное / нечетное число из нечетного / четного списка Python.
  • Есть ли лучший способ конвертировать список в словарь в Python с ключами, но нет значений?
  • Pythonic способ распечатать элементы списка
  • Использование определения списка для соответствия значениям словарей, которые хранятся в списках
  • Python - лучший язык программирования в мире.