Home >Backend Development >Python Tutorial >How Can I Identify Consecutive Number Groups in a Python List?

How Can I Identify Consecutive Number Groups in a Python List?

Susan Sarandon
Susan SarandonOriginal
2024-12-30 01:52:08653browse

How Can I Identify Consecutive Number Groups in a Python List?

Identify Consecutive Number Groups in a List

Identifying groups of consecutive numbers in a list is a common task that arises in various programming scenarios.

Python's Built-in Tools

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]))

Alternate Approach

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn