按索引对列表中的列表元素进行分组

3 投票
5 回答
544 浏览
提问于 2025-04-16 20:18

我想处理一个包含多个列表的列表,然后返回一个新的列表,这个新列表里的每个子列表都包含原列表中相同位置的元素。我知道我这样说得不太清楚。下面是一个例子。

假设我有这样一个列表的列表:

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

我想得到另一个列表的列表,其中每个子列表都包含原列表中某个特定位置的所有元素。例如:

[[1,2,3], [4,5,6], [7,8,9]] becomes [[1,4,7], [2,5,8], [3,6,9]]

这样返回的列表中的第一个子列表,就包含了原列表中每个子列表的第一个元素,依此类推。我现在卡住了,不知道该怎么做。任何帮助都非常感谢。谢谢。

5 个回答

2

也许一个简单的方法是:

a=[[1,2,3], [4,5,6], [7,8,9]]
b=zip(*a)

b 的值将变成 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]。希望这对你有帮助。

2

Dan D的回答是正确的,适用于Python 2和Python 3。

如果你在做很多矩阵运算,不仅仅是转置,那就值得考虑一下Numpy这个库:

>>> import numpy as np
>>> x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> np.swapaxes(x, 0, 1)
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

或者,更简单地,按照评论的建议,使用numpy.transpose()

>>> np.transpose(x)
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])
8
>>> [list(t) for t in zip(*[[1,2,3], [4,5,6], [7,8,9]])]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答