Python:列表列表:切换条目位置

时间:2016-07-24 05:04:16

标签: python list

假设我创建一个整数列表列表以反映3 x 3矩阵:

矩阵= [[1,2,3],[4,5,6],[7,8,9]]来反映矩阵:

1 2 3

4 5 6

7 8 9

在数学文献和阅读中,我们通常以(x,y)形式引用矩阵的条目。因此,如果我们想知道第1行第3列中的条目,我们会考虑矩阵的(0,2)条目,条目是值3.

当然,当它实际返回值7时,矩阵[0] [2]可能会错误。为了得到值3,我们必须将列表条目位置切换到矩阵[2] [0 ]。

除了操纵矩阵的构造,创建另一个数据结构,或者创建另一个列表列表之外,Python还有一种方法可以切换入口位置吗?这样:

modifiedList [x] [y] == originalList [y] [x]

2 个答案:

答案 0 :(得分:1)

您可以使用zip

  

创建一个迭代器,聚合来自每个迭代的元素

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

*用于传递元素列表(unpacking the arguments),而不是单个列表。所以上面*的效果是,zip的参数将是:(1,4,7),(2,5,8),(3,6,9),即:

list(zip((1, 4, 7), (2, 5, 8), (3, 6, 9))

答案 1 :(得分:0)

这就是所谓的换位。如果您正在使用numpy ndarray,您只需要调用ndarray.transpose来获取交换轴的视图。如果你真的想要列表列表,那么转换并不难:

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

请注意,numpy的视图可以满足您的要求,提供一个不会改变底层数据结构但只改变索引的视图。 zip方式创建了一整套新列表。您还可以创建一个将getitem映射到另一个行为的代理对象,但numpy已经以更有效的形式(对于数字矩阵)具有该代理对象。