ホームページ >バックエンド開発 >Python チュートリアル >Python リスト内の連続する番号グループを識別するにはどうすればよいですか?

Python リスト内の連続する番号グループを識別するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-30 01:52:08626ブラウズ

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

リスト内の連続する数字のグループを識別する

リスト内の連続する数字のグループを識別することは、さまざまなプログラミング シナリオで発生する一般的なタスクです。

Python の組み込みツール

幸いなことに、Python の組み込みツール関数とモジュールは、この問題に対する洗練されたソリューションを提供します。 1 つのアプローチでは、groupby() 関数とラムダ式を利用します。

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

このスニペットは、インデックスと値の差に基づいて連続する数値をグループ化し、各グループ内の要素が連続していることを保証します。

必要な出力が連続する数値の範囲を表すタプルのリストである場合、次の変更を行うことができます。 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]))

代替アプローチ

または、ループとリスト内包表記を使用してカスタム ソリューションを実装できます:

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

このアプローチはリストを反復処理します。 、連続する各グループの開始インデックスと終了インデックスを特定し、範囲リストに追加します。

以上がPython リスト内の連続する番号グループを識別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。