Zip機能について
前述のように、zip関数は、複数の反復可能なオブジェクトの要素からペアを作成するために使用されます。 zip関数の基本的な構文と使用法を理解するには、以下の例を検討してください。
list1= ['に'、 'NS'、 'NS']
list2= ['アップル'、 '玉'、 '猫']
zip形式= ジップ((list1、list2)。
印刷 ((リスト((zip形式)。)。
上記のコードサンプルの最初の2つのステートメントは、いくつかの要素を含む2つのリストを定義しています。次に、list1変数とlist2変数を引数として渡してzip関数を使用します。これはzip関数の主な構文です。要素を結合する引数として、リストまたはその他の有効な順序付き反復可能オブジェクトを渡す必要があります。最後に、printステートメントを使用してzip形式の変数の出力を取得します。上記のコードサンプルを実行すると、次の出力が得られます。
[( 'a'、 'apple')、( 'b'、 'ball')、( 'c'、 'cat')]
zip関数は、リストではなくzipタイプのオブジェクトを返すことに注意してください。上記のprintステートメントに示されているように、反復可能なタイプに変換する必要があります。
簡単に言うと、zip関数は、2つのリストから同じインデックスの要素を取得し、それらを1つのタプルにペアとして結合します。したがって、list1の0番目の要素はlist2の0番目の要素と結合され、list1の1番目の要素はlist2の1番目の要素と結合されます。 Zip関数は左から右に移動し、ペアの要素を含むタプルは、それらに格納されている要素と同じインデックスを持ちます。
Iterablesに同じ数の要素がない場合のZipの使用
上記の例では、両方のリストに同じ数の要素があります。両方のリストの要素数が同じでないコードを処理している場合、zip関数は、要素数が最も少ないリストの最後の要素で停止します。
以下の例では、list2にもう1つの要素があるかどうかに関係なく、zip関数はc要素で停止します。
list1= ['に'、 'NS'、 'NS']
list2= ['アップル'、 '玉'、 '猫'、 '人形']
zip形式= ジップ((list1、list2)。
印刷 ((リスト((zip形式)。)。
上記のコードサンプルを実行すると、次の出力が得られます。
[( 'a'、 'apple')、( 'b'、 'ball')、( 'c'、 'cat')]Zip関数を使用する場合は3つ以上の反復可能オブジェクトを使用できます
通常、zip関数は2つの反復可能なオブジェクトを比較するために使用されます。ただし、zip関数への引数として任意の数の反復可能オブジェクトを渡すことができます。最短リストの最後の要素で停止するという原則は引き続き適用されます。
list1= ['に'、 'NS'、 'NS']list2= ['アップル'、 '玉'、 '猫'、 '人形']
list3= [「5」、 「3」]
zip形式= ジップ((list1、list2、list3)。
印刷 ((リスト((zip形式)。)。
上記のコードサンプルを実行すると、結果として次の出力が得られます。
[( 'a'、 'apple'、 '5')、( 'b'、 'ball'、 '3')]Zipタイプのオブジェクトから個々のリストを作成する
すでにzipオブジェクトがある場合は、それを使用して、zip関数が最初に呼び出されたときに以前に使用された個々のリストを再作成できます。
list1= ['に'、 'NS'、 'NS']list2= ['アップル'、 '玉'、 '猫'、 '人形']
list3= [「5」、 「3」]
zip形式= ジップ((list1、list2、list3)。
l1、l2、l3= ジップ((* zip形式)。
印刷 ((リスト((l1)。、 リスト((l2)。、 リスト((l3)。)。
上記のコードサンプルを実行すると、結果として次の出力が得られます。
['a'、 'b'] ['apple'、 'ball'] ['5'、 '3']上記のコードサンプルでは、zipオブジェクトは*演算子を使用してデフレートされています。次に、デフレートされた結果は、元のリストを作成するzip関数への別の呼び出しに送られます。 zipオブジェクトが最初に作成されたときに長さが異なるリストが使用された場合、元のリストにすべての要素が戻らない可能性があることに注意してください。
要素を最長の反復可能から守りたいときにZipを使用する
上記の複数の例では、zip関数がデフォルトで最短の反復可能要素の最後の要素で停止することに気付いたかもしれません。最長の反復可能要素の最後の要素に到達するまで反復を継続したい場合はどうなりますか?
このような場合、Pythonのitertoolsモジュールのzip_longest()メソッドを使用する必要があります。 zip関数と同じように機能しますが、最も長い反復可能タイプの最後の要素で停止するという小さな違いが1つあります。
から itertools 輸入zip_longestlist1= ['に'、 'NS'、 'NS']
list2= ['アップル'、 '玉'、 '猫'、 '人形']
list3= [「5」、 「3」]
zip形式=zip_longest((list1、list2、list3)。
印刷 ((リスト((zip形式)。)。
上記のコードサンプルを実行すると、結果として次の出力が得られます。
[( 'a'、 'apple'、 '5')、( 'b'、 'ball'、 '3')、( 'c'、 'cat'、None)、(None、 'doll'、None) ]欠落している値は、Noneタイプのオブジェクトとして入力されます。追加のfillvalue引数をzip_longestメソッドに渡すことにより、独自の値を指定して入力することもできます。
から itertools 輸入zip_longestlist1= ['に'、 'NS'、 'NS']
list2= ['アップル'、 '玉'、 '猫'、 '人形']
list3= [「5」、 「3」]
zip形式=zip_longest((list1、list2、list3、fillvalue='my_value')。
印刷 ((リスト((zip形式)。)。
上記のコードサンプルを実行すると、結果として次の出力が得られます。
[( 'a'、 'apple'、 '5')、( 'b'、 'ball'、 '3')、( 'c'、 'cat'、 'my_value')、( 'my_value'、 'doll '、' my_value ')]結論
Zip関数は、いくつかのループと条件ステートメントを使用してエミュレートできます。ただし、不要な冗長性や繰り返しのステートメントを削除することで、コードを整理してクリーンに保つのに役立ちます。