假设我有几个长度为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方法是什么? (从x
到y
。)
条目可以是任何内容,我使用数字只是因为它们可视化良好。
答案 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
),然后迭代x
(z
)中的所有列表并创建一个新列表。
答案 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]]