加入" colums"将列表列表放入"行"列表清单

时间:2016-09-29 13:45:14

标签: python

假设我有几个长度为n的列表:

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
d = [-1, -2, -3]

我将这些列表放入列表中:

x = [a, b, c]

现在我想结束以下列表:

y = [[1, 4, 7, -1], [2, 5, 8, -2], [3, 6, 9, -3]]

这样做的快速和pythonic方法是什么? (从xy。)

条目可以是任何内容,我使用数字只是因为它们可视化良好。

3 个答案:

答案 0 :(得分:3)

以这种方式“反向压缩”列表有一种非常简单和pythonic的方法。简单地使用zip函数和解包运算符*

>>> y = zip(*x)
>>> list(y)
[(1, 4, 7, -1), (2, 5, 8, -2), (3, 6, 9, -3)]

有关正在进行的操作的详细信息,请参阅What is the inverse function of zip in python?

如果重要的是它是列表列表而不是元组列表,则可以执行以下操作:

>>> [list(i) for i in zip(*x)]
[[1, 4, 7, -1], [2, 5, 8, -2], [3, 6, 9, -3]]

答案 1 :(得分:3)

您可以在一行代码中执行此操作:

[[z[i] for z in x] for i in range(len(x[0]))]

它的作用是迭代所有索引(i),然后迭代xz)中的所有列表并创建一个新列表。

答案 2 :(得分:0)

您可以尝试zip

>>> result = zip(a,b,c,d) # This gives ans as list of tuples [(1, 4, 7, -1), (2, 5, 8, -2), (3, 6, 9, -3)]
>>> result_list = [list(elem) for elem in result] #convert list of tuples to list of list
>>> result_list
[[1, 4, 7, -1], [2, 5, 8, -2], [3, 6, 9, -3]]