ホームページ >バックエンド開発 >Python チュートリアル >コートのジッパーを閉めるだけではありません: Python で zip_longest をマスターする
おそらく、Python で長さの異なる 2 つのリストを圧縮しようとしてデータが失われるというイライラに遭遇したことがあるでしょう。
itertools.zip_longest は窮地を救うためにここにあります。ここでは、zip_longest() の使用方法を検討し、標準の zip と比較し、それが優れている実用的なシナリオを掘り下げていきたいと思います。
Python の itertools モジュールの zip_longest() 関数を使用すると、複数の反復可能オブジェクトを圧縮して、短い反復可能オブジェクトを指定された値 (デフォルト) で埋めることができます。これにより、反復可能の長さが異なる場合でも、データが失われることはありません。
生徒を教室に着席させようとしているが、生徒の数と利用可能な机の数が一致しないというシナリオを考えてみましょう。すべての生徒に席を確保し、すべての席が可能な限り埋まるようにしたいと考えています。
zip() を使用する場合、生徒または机がなくなるとすぐにペアリングが停止します。これは、一部の机が空のままになったり、一部の生徒が立ったままになったりする可能性があることを意味します。
zip_longest() を使用すると、すべての生徒と机をペアにすることができ、机が足りなくなった場合は、追加の生徒が立つ必要があることに注意できます。あるいは、学生よりも机の数が多い場合は、余分な机を「空」としてマークすることができます。すべての生徒が考慮され、どの机が空いているかが正確にわかります。
zip() と zip_longest() の両方を使用して、机の数が生徒の数を超える例を考えてみましょう。
students = ['Alice', 'Bob'] desks = ['Desk 1', 'Desk 2', 'Desk 3'] # Using zip to pair students with desks seating_zip = list(zip(students, desks)) print("Seating with zip:") for student, desk in seating_zip: print(f"{student} is assigned to {desk}")
出力:
Seating with zip: Alice is assigned to Desk 1 Bob is assigned to Desk 2
zip() を使用すると、短いリスト (生徒) がなくなるとすぐにペアリングが停止します。デスク 3 は未割り当てのままで、使用されていないという兆候はありません。
from itertools import zip_longest students = ['Alice', 'Bob'] desks = ['Desk 1', 'Desk 2', 'Desk 3'] # Using zip_longest to pair students with desks seating_zip_longest = list(zip_longest(students, desks, fillvalue='Empty Seat')) print("\nSeating with zip_longest:") for student, desk in seating_zip_longest: print(f"{student} is assigned to {desk}")
出力:
Seating with zip_longest: Alice is assigned to Desk 1 Bob is assigned to Desk 2 Empty Seat is assigned to Desk 3
zip_longest() を使用すると、すべての座席を埋めるのに十分な生徒がいない場合でも、すべての机が考慮されます。この場合、デスク 3 は「空席」とペアになっており、このデスクが空いていることを示します。このアプローチは、すべてのリソースを追跡し、漏れがないようにする必要がある場合に特に役立ちます。
? zip_longest()の利点:
データの保持: 短い反復可能値を埋めることで、データが失われないようにします。
柔軟性: カスタムの塗りつぶし値を指定できます。
包括的なペアリング: 異なる長さの反復可能オブジェクトの位置合わせが必要なデータ処理タスクに役立ちます。
? zip_longest():
の欠点
パディングは不要な可能性があります: 場合によっては、パディングにより不必要な複雑さが生じる可能性があります。
メモリ使用量: 大きな反復可能値や大きなフィル値を処理する場合、より多くのメモリを使用する可能性があります。
? zip()の利点:
シンプルかつ効率的: 同じ長さの反復可能オブジェクトとうまく機能します。
メモリ使用量の削減: パディングがないことは、潜在的にメモリのオーバーヘッドが少ないことを意味します。
? zip()の欠点:
データ損失: 反復可能な最も短いものに切り捨てられ、長いものからのデータが失われます。
zip_longest() は、特に異なる長さの反復可能オブジェクトを扱う場合に、Python の強力なツールです。欠損値を埋めることでデータの整合性を確保するため、さまざまなデータ処理タスクに最適です。 zip() はよりシンプルでメモリ効率が高くなりますが、zip_longest() は多くの実際的なシナリオで必要な柔軟性を提供します。
以上がコートのジッパーを閉めるだけではありません: Python で zip_longest をマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。