拆分Python列表

时间:2015-06-14 10:54:24

标签: list python-2.7 split

我想拆分下面的列表:

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

我试过了:

a, b = my_list

这不起作用。

我需要的是:

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

我正在寻找最简单,最简单的方法。

4 个答案:

答案 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),而是使用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]

在这里,我们使用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]