Python

Pythonのzip( )関数とzip_longest( )関数の使い方について

By 2021年4月4日No Comments

この記事ではPythonのzip( )関数とzip_longest( )関数を使って、それぞれの配列などの要素を一つに結合する方法について解説していきます。

複数のリストやタプルなどのイテラブルオブジェクトの要素をまとめる事ができます。

Pythonのzip( )関数で複数の配列をまとめる方法

zip( )関数を使って複数の配列の要素を一つにまとめていきます。構文は下記になります。

zip(配列1, 配列2)

リストの配列の2つの要素を取得して1つにまとめていきます。

number = [1, 2, 3]
initial = ['a', 'b', 'c']
print(zip(number, initial))

結果:

<zip object at 0x106e51ec0>

結果は処理されましたが返却値がzipオブジェクトで返されているのでlist( )を使ってリスト型に変換して表示させることができます。

print(list(zip(number, initial)))

結果:

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

このようにリスト型に変換して表示させる事ができました。

zip( )関数で2つ以上の配列もまとめる事ができます。

number = [1, 2, 3]
initial1 = ['a', 'b', 'c']
initial2 = ['A', 'B', 'C']
print(list(zip(number, initial1, initial2)))

結果:

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

このようにzip( )関数は2つ以上の複数のリストの要素を取得して1つの配列にまとめることができました。

ただし、zip( )関数は配列の長さが異なる場合は短い方に揃えて処理されます。配列のインデックス数が少ない方の値が返されるので、値が多すぎるのは処理されません。

number = [1, 2, 3]
initial = ['a', 'b', 'c', 'd', 'e']
print(list(zip(number, initial)))

結果:

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

このように少ない方の配列に揃えて処理されました。

文字列もzip( )関数で扱うことができます。

number = '123'
initial = 'abc'
print(list(zip(number, initial)))

結果:

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

dict( )関数を使うとリスト型から辞書型を作ることができます。辞書型は「キー」と「値」で構成されるので、「キー」のリストと「値」のリストを統合されます。

number = [1, 2, 3]
initial = ['a', 'b', 'c']
add_dict = dict(zip(number, initial))
print(add_dict)

結果:

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

これでリストを辞書型としてまとめる事ができました。Pythonでzip( )関数を使って様々な要素パターンで処理することができました。

forループで処理する場合はlist( )を使ってリスト型に変換しなくてもzipオブジェクトのまま扱うことができます。

number = [1, 2, 3]
initial = ['a', 'b', 'c']
for num, ini in zip(number, initial):
    print(num, ini)

結果:

1 a
2 b
3 c

このようにforループでzip( )関数を使うと引数で指定されたリストのインデックスの配列の要素の値を取得することができました。

Pythonのitertoolsのzip_longest( )関数で余った配列の要素を取得する方法

zip_longest( )関数を使うと複数の配列をまとめた場合に余った配列の要素もすべて取得できます。配列の長さを超えた場合の要素はデフォルトでNoneが返されます。構文は下記になります。

zip_longest(配列1, 配列2, fillvalue=None)

まずはitertoolsのzip_logest( )関数のモジュールをインポートします。

from itertools import zip_longest

2つの配列の要素数が違う値をzip_longest( )関数で1つの配列にまとめます。

from itertools import zip_longest
number = [1, 2, 3]
initial = ['a', 'b', 'c', 'd', 'e']
for num, ini in zip_longest(number, initial):
    print(num, ini)

結果:

1 a
2 b
3 c
None d
None e

このようにデフォルトでNoneが返されて余った配列の要素も取得することができました。デフォルトのNoneは引数のfillvalueに値を指定します。

from itertools import zip_longest
number = [1, 2, 3]
initial = ['a', 'b', 'c', 'd', 'e']
for num, ini in zip_longest(number, initial, fillvalue="見つかりませんでした。"):
    print(num, ini)

結果:

1 a
2 b
3 c
見つかりませんでした。 d
見つかりませんでした。 e

このようにitertoolsのzip_longest( )関数を使うと複数の配列の余った要素も取得できます。

まとめ

今回はPythonのzip( )関数とzip_longest( )関数についてでした。複数のリストなどの配列の値を取得して1つの配列にまとめることができました。

zip( )関数とzip_longest( )関数の違いは一番要素数のzip( )関数は複数の配列の少ない配列に合わせるのに対して、zip_longest( )関数は要素数の多い配列に合わせて処理する事ができます。以上、Pythonのzip( )関数とzip_longest( )関数の使い方についてでした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL