2015-06-14 96 views
-3

我想下面分裂名單:分裂Python列表

my_list = [(55, 22), (66, 33), (77, 44)] 

我曾嘗試:

a, b = my_list 

這沒有奏效。

我需要的是:

a = [55,66,77] 
b = [22,33,44] 

我正在尋找最簡單,最簡單的方法。

+1

搜索選中此代碼片段'在zip'文檔。 – thefourtheye

+0

@thefourtheye不知道雖然... – jean

回答

3
In [18]: L = [(55, 22), (66, 33), (77, 44)] 

In [19]: a,b = zip(*L) 

In [20]: a 
Out[20]: (55, 66, 77) 

In [21]: b 
Out[21]: (22, 33, 44) 
+0

會指望zip(* L) – jean

1

你需要做以下各項

a, b = zip(*my_list) 
2

方法-1使用ZIP和地圖:

a, b = map(list, zip(*my_list)) #this returns 2 lists 

a 
[55, 66, 77]  
b 
[22, 33, 44] 

這裏,而不是僅僅使用zip(*my_list),我已經一起使用mapzip來獲得2個列表,而不是OP詢問的兩個元組。

zip(*)的解釋:該函數採用兩個相等長度的集合,並將它們成對合並在一起。如果我們用這2名列表,我們得到如下:

a1 = [1,2,3] 
a2 = [4,5,6] 
a3 = zip(a1,a2) 
[(1, 4), (2, 5), (3, 6)] 

現在,如果你需要去合併它們,你可以再次使用zip()因爲zip是其本身的逆但你需要使用特殊的*操作。 *運算符用於解壓值。

a4,a5 = zip(*a3) 
a4 
(1, 2, 3) #returns a tuple though 
a5 
(4, 5, 6) #returns a tuple though 

方法-2列表綜合:

a = [x[0] for x in my_list] 
b = [x[1] for x in my_list]  
a 
[55, 66, 77] 
b 
[22, 33, 44] 

在這裏,我們使用列表解析生成兩個列表。

我建議你使用第一種方法。

0

而是使用拉鍊,您可以使用循環遍歷元組的內部列表

first_element_list =list() 
>>> second_element_list = list() 
>>> for i in my_list: 
...  first_element_list.append(i[0]) 
...  second_element_list.append(i[1]) 

OR

first_element_list =list() 
second_element_list = list() 

[first_element_list.append(i[0]) for i in my_list] 
[second_element_list.append(i[1]) for i in my_list]