ホームページ >バックエンド開発 >Python チュートリアル >Python でリスト値の重複するペア (または N 要素ウィンドウ) を効率的に反復するにはどうすればよいですか?
リスト値の重複するペアの反復
Python リストを反復する場合、多くの場合、現在の要素と後続の要素の両方にアクセスする必要があります。 zip 関数を使用して連続する値をペアにするのは効果的ですが、より効率的なアプローチがある可能性があります。
pairwise() 関数を使用する
Python 3.8 には itertools が用意されています。反復可能な要素の連続する要素をペアにする、pairwise() 関数:
import itertools def pairwise(iterable): "s -> (s0, s1), (s1, s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return zip(a, b)
この関数は 2 つを作成します。イテレータ a および b は、入力反復可能オブジェクトの最初の要素を指します。 b が 1 ステップ進むと、a は現在の要素を指し、b は次の要素を指します。次に、zip を使用して両方のイテレータの要素をペアにします。
使用例:
the_list = ['a', 'b', 'c', 'd'] for current, next in pairwise(the_list): print(current, next) # Output: # a b # b c # c d
注意事項:
重要なことは、pairwise() は反復可能オブジェクトを複数回反復することによって機能するということです。これは、1 つの反復子が他の反復子よりも大幅に速く進む場合、実装は消費された要素をメモリ内に保持して、すべての反復子が確実に利用できるようにする可能性があることを意味します。
N 要素ウィンドウのその他のオプション
pairwise() 関数は、任意のウィンドウを作成するように拡張できます。サイズ:
def n_wise(iterable, n): "s -> (s0, s1, ..., s(n-1)), (s1, s2, ..., s(n)), ..." iterators = itertools.tee(iterable, n) for i in range(1, n): next(iterators[i], None) return zip(*iterators)
たとえば、リスト内のトリプルを反復するには:
for triplet in n_wise(the_list, 3): print(*triplet) # Output: # a b c # b c d
結論:
従来の方法では、 zip を使用して重複するペアを反復処理することは可能です。pairwise() 関数と n_wise 関数は、同じ結果を達成するための簡潔で効率的な方法を提供します。任意のサイズのウィンドウ
以上がPython でリスト値の重複するペア (または N 要素ウィンドウ) を効率的に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。