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)
これでちゃんと覚えた.