「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python で「itertools.cycle」を使用して異なるサイズのリストを圧縮する方法?

Python で「itertools.cycle」を使用して異なるサイズのリストを圧縮する方法?

2024 年 11 月 24 日に公開
ブラウズ:580

How to Zip Differently Sized Lists Using `itertools.cycle` in Python?

組み込み関数を使用した異なるサイズのリストの圧縮

組み込みの zip 関数は、2 つのリストをマージするときに短いリストを繰り返すことができませんサイズの異なるリストの場合は、 itertools.cycle 関数を利用してこの結果を達成できます。Python パッケージの

cycle itertools は、反復可能オブジェクトが枯渇した後でも反復可能オブジェクトから要素を繰り返し返す反復子を作成します。 zip とサイクルを組み合わせることで、リスト間のサイズの不一致を処理し、必要に応じて長いリストを確実に繰り返すことができます。

例:

A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
B = ["A", "B", "C"]

# Use itertools.cycle to repeat the shorter list
from itertools import cycle
zip_list = zip(A, cycle(B)) if len(A) > len(B) else zip(cycle(A), B)

この例では:

  • if len(A) > len(B) は、最初のリスト (A) が 2 番目のリスト (B) より長いかどうかをチェックします。
  • そうであれば、zip を使用して A を循環リストとマージします。 B のイテレータ。マージされた結果全体で B を効果的に繰り返します。
  • B が長い場合は、順序を反転し、代わりに A を循環します。

Result:

zip_list には、ジェネレーター オブジェクトとして次のタプルが含まれます:

[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'A'), (5, 'B'), (6, 'C'), (7, 'A'), (8, 'B'), (9, 'C')]

仕組み:

itertools.cycle は反復可能オブジェクトのコピーを作成します(この場合は B)、その要素を繰り返し返します。 zip は A を反復処理する際、各要素を循環反復子の次に使用可能な要素と組み合わせます。

A が B より短い場合、反復子が使い果たされると、プロセスは B の先頭からやり直します。逆に、A の方が長い場合、B 反復子は継続的に循環して、マージされたリストの残りの部分を埋めます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3