Python
zip
python3
リスト

zip()で合成したリストを再び分割する

More than 1 year has passed since last update.

機械学習や、その他、何かしらのデータセットを扱うときに、データが二つのリストに分かれていることがあります。

そんなときに、二つのリストをくっつけるのに、zip()関数を使います。

zip-test.py
a = [1, 2, 3, 4, 5]
b = ['a', 'b', 'c', 'd', 'e']
print(list(zip(a, b)))
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]

しかし、くっつけた後、何かしらの処理をした後に、再び分割するには、どうしたらよいのでしょう。

そんなときには、zip(*リスト)のように書くと、合成したリストを分離することができます。以下は、二つのリストを合成して、シャッフルした後に、再び分割する例です。

zip-unzip.py
import random

a = [1, 2, 3, 4, 5]
b = ['a', 'b', 'c', 'd', 'e']

# 二つのリストを合成
c = list(zip(a, b))

# シャッフル
random.shuffle(c)

# 合成したリストを分離する
a, b = zip(*c)

print(a) # (5, 2, 3, 1, 4)
print(b) # ('e', 'b', 'c', 'a', 'd')