我想拆分下面的列表:
my_list = [(55, 22), (66, 33), (77, 44)]
我试过了:
a, b = my_list
这不起作用。
我需要的是:
a = [55,66,77]
b = [22,33,44]
我正在寻找最简单,最简单的方法。
答案 0 :(得分: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)
答案 1 :(得分:2)
方法-1使用zip和map:
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]
在这里,我们使用list comprehension生成两个列表。
我建议您使用第一种方法。
答案 2 :(得分:1)
您需要执行以下操作 -
a, b = zip(*my_list)
答案 3 :(得分:0)
相反,你使用zip,你可以使用for循环迭代列表
中的元组检查此代码段
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]