ホームページ >バックエンド開発 >Python チュートリアル >Python リストで連続する番号グループを識別する方法?

Python リストで連続する番号グループを識別する方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 15:11:10681ブラウズ

How to Identify Consecutive Number Groups in Python Lists?

連続する番号グループの識別

Python では、組み込みの itertools.groupby( ) 関数。その仕組みは次のとおりです。

itertools.groupby() Function

groupby() 関数は、キー関数に基づいて反復可能要素をグループ化します。この場合、要素のインデックスとその値の差を計算するキー関数を定義します。連続する数字は同じキーを持つため、グループ化されます。

コードの実装:

サンプル リスト [2、3、4、5、12、13] を考えてみましょう。 、14、15、16、17、20]。以下のコードは、groupby() を利用して連続する番号グループを識別します。

from itertools import groupby
from operator import itemgetter

data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
ranges = []

for k, g in groupby(enumerate(data), lambda (i, x): i - x):
    group = map(itemgetter(1), g)
    if len(group) > 1:
        ranges.append(tuple(group[0], group[-1]))
    else:
        ranges.append(group[0])

主要な関数の理解:

ラムダ関数 (lambda (i, x): i - x) は、要素のインデックス (i) と値 (x) の差を計算します。この違いにより、連続する番号をグループ化することができます。たとえば、数値 2 の場合、差は 0 になり、数値 12 の場合、差は 10 になります。

グループ化された要素の処理:

それぞれkey (差分)、groupby() は、対応するグループ化された要素を含むジェネレーター オブジェクト (g) を生成します。 Map() と itemgetter() を使用してこのジェネレーターをリストに変換し、要素の値のみを抽出します。

結果のフィルタリングと追加:

長さをチェックします。グループ化された要素が 1 より大きいかどうかを判断し、連続する番号を示します。その場合、グループ内の最初と最後の要素のタプルを範囲リストに追加します。個々の数値の場合は、数値自体を追加します。

出力:

範囲リストには、次の連続した数値のグループが含まれます:

[(2, 5), (12, 17), 20]

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

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