1. ホーム
  2. パイソン

[解決済み】ペアのリスト/タプルを2つのリスト/タプルにアンパックする。

2022-04-08 23:17:05

質問

<ブロッククオート

重複している可能性があります。

Pythonによるトランスポーズ/アンジップ関数

こんな感じのリストがあります。

list = (('1','a'),('2','b'),('3','c'),('4','d'))

リストを2つに分けたいのですが。

list1 = ('1','2','3','4')
list2 = ('a','b','c','d')

で例えばできるんです。

list1 = []
list2 = []
for i in list:
   list1.append(i[0])
   list2.append(i[1])

しかし、もっとエレガントなソリューションがあるのか知りたい。

どのように解決するのですか?

>>> source_list = [('1','a'),('2','b'),('3','c'),('4','d')]
>>> list1, list2 = zip(*source_list)
>>> list1
('1', '2', '3', '4')
>>> list2
('a', 'b', 'c', 'd')

編集する なお zip(*iterable) はそれ自身の逆数である。

>>> list(source_list) == zip(*zip(*source_list))
True

2つのリストに解凍すると、こうなります。

>>> list1, list2 = zip(*source_list)
>>> list(source_list) == zip(list1, list2)
True

rocksportrocker さんの提案による追加。