ホームページ > バックエンド開発 > Python チュートリアル > Python リスト内の重複する要素のペア (またはトリプル) を効率的に反復するにはどうすればよいですか?

Python リスト内の重複する要素のペア (またはトリプル) を効率的に反復するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-16 14:53:17
オリジナル
490 人が閲覧しました

How Can I Efficiently Iterate Over Overlapping Pairs (or Triples) of Elements in a Python List?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート