Python で 2 つのリストを圧縮する方法


多くの場合、Python で 2 つのリストを圧縮 (または「マージ」) することに興味があるかもしれません。幸いなことに、これは zip() 関数を使用して簡単に行うことができます。

このチュートリアルでは、この機能の実際の使用例をいくつか示します。

例 1: 同じ長さの 2 つのリストを 1 つのリストに圧縮する

次の構文は、同じ長さの 2 つのリストを 1 つに圧縮する方法を示しています。

 #define list a and list b
a = ['a', 'b', 'c']
b = [1, 2, 3]

#zip the two lists together into one list
list( zip (a,b))

[('a', 1), ('b', 2), ('c', 3)]

例 2: 同じ長さの 2 つのリストを辞書に圧縮する

次の構文は、同じ長さの 2 つのリストを辞書に圧縮する方法を示しています。

 #define list of keys and list of values
keys = ['a', 'b', 'c']
values = [1, 2, 3]

#zip the two lists together into one dictionary
dict( zip (keys, values)) 

{'a': 1, 'b': 2, 'c': 3}

例 3: 長さが等しくない 2 つのリストを圧縮する

2 つのリストの長さが等しくない場合、zip() は短いリストの長さに切り詰められます。

 #define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together into one list
list( zip (a,b))

[('a', 1), ('b', 2), ('c', 3)]

zip() が最短のリストの長さに切り詰められるのを防ぎたい場合は、代わりにitertoolsライブラリのzip_longest()関数を使用できます。

デフォルトでは、この関数は欠損値を「なし」で埋めます。

 from itertools import zip_longest

#define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together without truncating to length of shortest list
list( zip_longest (a, b))

[('a', 1), ('b', 2), ('c', 3), ('d', None)]

ただし、 fillvalue引数を使用して、使用する別の塗りつぶし値を指定できます。

 #define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together, using fill value of '0'
list( zip_longest (a, b, fillvalue= 0 ))

[('a', 1), ('b', 2), ('c', 3), ('d', 0)]

zip_longest() 関数の完全なドキュメントはここで見つけることができます。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です