ホームページ >バックエンド開発 >Python チュートリアル >Python リストで連続する番号グループを識別する方法?
連続する番号グループの識別
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 サイトの他の関連記事を参照してください。