我想下面分裂名單:分裂Python列表
my_list = [(55, 22), (66, 33), (77, 44)]
我曾嘗試:
a, b = my_list
這沒有奏效。
我需要的是:
a = [55,66,77]
b = [22,33,44]
我正在尋找最簡單,最簡單的方法。
我想下面分裂名單:分裂Python列表
my_list = [(55, 22), (66, 33), (77, 44)]
我曾嘗試:
a, b = my_list
這沒有奏效。
我需要的是:
a = [55,66,77]
b = [22,33,44]
我正在尋找最簡單,最簡單的方法。
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)
會指望zip(* L) – jean
你需要做以下各項
a, b = zip(*my_list)
方法-1使用ZIP和地圖:
a, b = map(list, zip(*my_list)) #this returns 2 lists
a
[55, 66, 77]
b
[22, 33, 44]
這裏,而不是僅僅使用zip(*my_list)
,我已經一起使用map
用zip
來獲得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]
在這裏,我們使用列表解析生成兩個列表。
我建議你使用第一種方法。
而是使用拉鍊,您可以使用循環遍歷元組的內部列表
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]
搜索選中此代碼片段'在zip'文檔。 – thefourtheye
@thefourtheye不知道雖然... – jean