按索引对列表中的列表元素进行分组
我想处理一个包含多个列表的列表,然后返回一个新的列表,这个新列表里的每个子列表都包含原列表中相同位置的元素。我知道我这样说得不太清楚。下面是一个例子。
假设我有这样一个列表的列表:
[[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]]
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。