我有一個看起來像這樣的列表:
我想要分開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])
但我想知道是否有一個更優雅的解決方案。
我有一個看起來像這樣的列表:
我想要分開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
開箱成兩份名單,這成爲:
>>> list1, list2 = zip(*source_list)
>>> list(source_list) == zip(list1, list2)
True
加入由rocksportrocker建議。
對於OP,如果您不知道「splat」操作符,那麼http://stackoverflow.com/questions/5239856/foggy-on-asterisk-in-python會很有幫助。 – dicato
我想指出'zip(* list_of_pairs)'的結果不是一對'list',而是'tuple'。在某些情況下差異可能很重要(例如追加到它)。所以這個例子中的'list1'和'list2'應該是'tuple1'和'tuple2'。 – Causality
@因果關係肯定是真的。我在問題中使用了相同的名稱,它們也是'元組'。這個錯誤是在最初發布這個問題時對這個問題的評論中指出的:http://stackoverflow.com/questions/7558908/unpacking-a-list-tuple-of-pairs-into-two-lists-tuples/ 7558990?noredirect = 1#comment9163175_7558908 – agf
請不要使用變量的內置類型名稱。不要稱之爲「list」。一旦你創建了一個變量'list',你就會開始發生奇怪的事情,因爲內建函數list()現在被你的變量隱藏了。 –
這是一個元組,而不是一個列表。儘管它們可以被類似地使用,但讓它們在Python中保持直線很重要。 –