I have a sequence of numbers in a list and I'm looking for an elegant solution, preferably list comprehension, to get the individual sequences (including single values). I have solved this small problem but it is not very pythonic.
The following list defines an input sequence:
input = [1, 2, 3, 4, 8, 10, 11, 12, 17]
The desired output should be:
output = [
[1, 2, 3, 4],
[8],
[10, 11, 12],
[17],
]
>>> 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 means simple, straightforward code, and not one-liners.
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])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With