Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按索引对列表中的列表元素进行分组_Python_List - Fatal编程技术网

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

Python 按索引对列表中的列表元素进行分组,python,list,Python,List,我试图获取一个列表列表,并返回一个列表列表,其中包含原始列表索引中的每个元素。我知道那句话措辞很糟糕。这里有一个例子 假设我有以下列表: [[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]] 因此,返回列表中的第一个列表包含每个原始列表第一个索引处的所有元素,依此类推。我被卡住了,不知道该怎

我试图获取一个列表列表,并返回一个列表列表,其中包含原始列表索引中的每个元素。我知道那句话措辞很糟糕。这里有一个例子

假设我有以下列表:

[[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]]

因此,返回列表中的第一个列表包含每个原始列表第一个索引处的所有元素,依此类推。我被卡住了,不知道该怎么做。任何帮助都将不胜感激。谢谢。

也许一个简单的方法是:

>>> [list(t) for t in zip(*[[1,2,3], [4,5,6], [7,8,9]])]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
a=[[1,2,3], [4,5,6], [7,8,9]]
b=zip(*a)
b将等于[(1,4,7),(2,5,8),(3,6,9)]。
希望这有帮助

除了
zip(*list)
方法之外,您还可以使用列表理解:

[[l[i] for l in lists] for i in range(3)]
是正确的,将在Python2.x和Python3.x中工作

如果你在做大量的矩阵运算,而不仅仅是换位运算,那么在这一点上值得考虑:

>>> 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]])
或者,更简单地说,根据评论,使用:


如果您想简单地转换矩阵-例如,要获得新矩阵,其中行是初始矩阵的COL,而列等于初始矩阵行值,则可以使用:

initMatr = [
            [1,2,3],
            [4,5,6],
            [7,8,9]
           ]
map(list, zip(*initMatr))


>>> [
     [1,4,7],
     [2,5,8],
     [3,6,9]
    ]
或者,如果要向左旋转矩阵,则:

map(list, zip(*map(lambda x: x[::-1], initMatr)

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

仅供参考:这通常被称为转置或旋转。@delnan:我不想称之为旋转。这个列表包含元组,而不是Python2.x中的列表和Python3.x中的
zip
对象。这可能没问题,但值得注意。是的,这也许足够了。Dan D.solution已经给出了包含列表的完整解决方案。您的解决方案使用数组也很好,谢谢。或者
[[l[i]代表列表中的l]代表范围内的i(len(列表))]
来删除硬编码的三个。我觉得非常愚蠢,因为我错过了一个内置的解决方案。为我辩护,我以前从未使用过类似的东西。谢谢你@因为我忘了它在那儿!谢谢你的提醒。
map(list, zip(*map(lambda x: x[::-1], initMatr)

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