aobako.net

(備忘) よくわすれる zip

August 31, 2019

Python には zip という組み込み関数が存在するが,割と使用するくせに良く使用方法を忘れるのでメモしておく.

zip(*iterables)

公式では次のように触れられている.

それぞれのイテラブルから要素を集めたイテレータを作ります。

つまり,リストなどのイテラブルなデータを複数わたすことで,合成したひとつのイテラブルなオブジェクトが返ってくる.

sample_1
l_a = ["foo", "bar", "baz"]
l_b = [1, 2, 3]

zipped = zip(l_a, l_b)

print(zipped)

# <zip object at 0x10a220f00>

イテレータなので,ループでまわせる.

sample_2
for item in zipped:
    print(item)

# ('foo', 1)
# ('bar', 2)
# ('baz', 3)

↑タプルでとれる.

sample_3
for a, b in zipped:
    print(a, b)

# foo 1
# bar 2
# baz 3

↑とすればそれぞれの変数に展開.

また,list & dict に直接キャストすることができる.

sample_4
print(list(zipped))
# [('foo', 1), ('bar', 2), ('baz', 3)]

print(dict(zipped))
# {'foo': 1, 'bar': 2, 'baz': 3}

zip したリストを元に戻す場合は次のようにする.

sample_5
a, b = zip(*zip(l_a, l_b))
print(a)
# ('foo', 'bar', 'baz')
print(b)
# (1, 2, 3)

これでちゃんと覚えた.