Identifying groups of consecutive numbers in a list is a common task that arises in various programming scenarios.
Fortunately, Python's built-in functions and modules provide elegant solutions for this problem. One approach leverages the groupby() function and the lambda expression:
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 snippet groups consecutive numbers based on the difference between their index and value, ensuring that elements within each group are consecutive.
If the desired output is a list of tuples representing the range of consecutive numbers, the following modification can be made:
ranges = [] for k, g in groupby(enumerate(data), lambda (i, x): i - x): group = map(itemgetter(1), g) ranges.append((group[0], group[-1]))
Alternatively, a custom solution can be implemented using a loop and a list comprehension:
ranges = [] for i in range(len(data)): if i == len(data) - 1 or data[i] + 1 != data[i + 1]: ranges.append((data[i], data[i])) else: start = i while i + 1 < len(data) and data[i] + 1 == data[i + 1]: i += 1 ranges.append((data[start], data[i]))
This approach iterates through the list, identifying the starting and ending indices of each consecutive group and appending them to the ranges list.
The above is the detailed content of How Can I Identify Consecutive Number Groups in a Python List?. For more information, please follow other related articles on the PHP Chinese website!