Identifying Consecutive Number Groups in a List
In Python, identifying groups of consecutive numbers in a list can be achieved through various methods. Here's a discussion of the available options:
1. Using GroupBy Recipe from Python Docs:
Python provides an elegant recipe for this task. GroupBy iterates over enumerated list items, grouping consecutive numbers:
from operator import itemgetter from itertools import groupby data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17] for k, g in groupby(enumerate(data), lambda (i,x):i-x): print(map(itemgetter(1), g))
This will output groups of consecutive numbers:
[2, 3, 4, 5] [12, 13, 14, 15, 16, 17]
2. Modifying the GroupBy Output:
To obtain the requested tuple format, you can modify the output as follows:
ranges = [] for k, g in groupby(enumerate(data), lambda (i,x):i-x): group = map(itemgetter(1), g) ranges.append((group[0], group[-1]))
This will output:
[(2, 5), (12, 17)]
3. Custom Implementation:
You can also implement your own custom solution:
ranges = [] for key, group in groupby(enumerate(data), lambda (index, item): index - item): group = map(itemgetter(1), group) if len(group) > 1: ranges.append(xrange(group[0], group[-1])) else: ranges.append(group[0])
Handling Individual Numbers:
To return individual numbers as individual elements, simply modify the custom implementation code as follows:
... if len(group) > 1: ranges.append(xrange(group[0], group[-1]+1)) else: ranges.append(group[0])
The above is the detailed content of How to Identify Consecutive Number Groups in a Python List?. For more information, please follow other related articles on the PHP Chinese website!