Python で重複する値のペアを反復処理する
Python でリストを反復処理する場合、現在の要素と次の要素を同時に実行します。従来、これは次のようなコードを使用して実現されてきました:
for current, next in zip(the_list, the_list[1:]): # Do something
ただし、Python 3.8 ではこれを実現するためのより効率的な方法が導入されました:
ペアワイズ関数の利用
Python ドキュメントでは、これに対する簡単なペアごとの関数が提供されています。目的:
import itertools def pairwise(iterable): a, b = itertools.tee(iterable) next(b, None) return zip(a, b)
この関数は、入力反復可能オブジェクトの最初の要素を指す 2 つの反復子 a と b を作成します。次に、反復子 b が 1 ステップ進められ、その結果、 a は現在の要素を指し、 b は次の要素を指します。次に、zip 関数を使用して、これらの要素のペアを作成します。
Python 2 の場合
Python 2 の場合、itertools.izip で同様のペア関数を使用できます。 zip の代わりに関数:
import itertools def pairwise(iterable): a, b = itertools.tee(iterable) next(b, None) return itertools.izip(a, b)
複数への一般化Elements
ペアワイズ関数は、T 呼び出しの n パラメーターを調整することで要素のより大きなウィンドウを生成するように一般化できます。たとえば、3 つの要素のペアを作成するには、次を使用できます。
def threes(iterator): a, b, c = itertools.tee(iterator, 3) next(b, None) next(c, None) next(c, None) return zip(a, b, c)
警告
この手法は大量のメモリを消費する可能性があることに注意することが重要です。 1 つの反復子が他の反復子よりも先に進んだ場合。これは、ウィンドウ サイズが大きい場合、または元の反復可能オブジェクトに多くの要素がある場合に発生する可能性があります。
以上がPython リスト内の重複する要素のペア (またはトリプル) を効率的に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。