拆分 Python 列表

Splitting Python List

我想拆分下面的列表:

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)

您需要执行以下操作-

a, b = zip(*my_list)

方法一使用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

方法二列表理解:

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

在这里,我们使用列表理解来生成两个列表。

我建议你使用第一种方法。

您可以改为使用 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])

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]