在Python中有什么方法可以追加?

时间:2015-05-03 19:35:11

标签: python matrix append behind

我有一个矩阵:

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

我需要创建一个新矩阵:

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

我试过

new_matrix = [[1]]
new_matrix.append(matrix[1][0])

并获得new_matrix = [4 1]而不是new_matrix = [1 4]

如果您需要更多说明,请询问。

4 个答案:

答案 0 :(得分:8)

是。使用new_matrix.insert(0,matrix[1][0])

insert(position,value)允许您将对象插入列表中的指定位置。在这种情况下,由于您希望在开头插入数字,因此位置为零。

但是,请注意,如果new_matrix有n个元素,则需要O(n)时间。如果new_matrix有100个元素,那么在开头添加一些元素需要花费十倍的时间比它有10个元素。这比在列表末尾添加一些东西要慢得多,这通常需要O(1):它应该是快速的new_matrix有多大。有关python操作的时间复杂性的更多信息,请参阅here。如果您经常在列表的开头添加元素,您可能需要考虑是否可以改变您正在做的事情。

另外,请注意你做事的方式,这会给你一个[4,[1]]的new_matrix。我不太确定你想要什么:如果你想要最终结果,那么你需要new_matrix = [1]。如果您的代码正确(new_matrix = [[1]]),并且您想要[[4,1]],那么您需要执行new_matrix[0].insert(0,4)。如果您需要[[4],[1]],则需要执行new_matrix.insert(0,[4]),依此类推。

顺便说一句,既然你似乎在用矩阵做事,你考虑过使用numpy吗?

(我想指出的是,如果这个答案看起来有点偏离主题,那是因为这个问题被编辑成与最初提出的问题完全不同。)

至于新问题:虽然Stefan的答案很好,但你可能会给自己太多的工作。很明显,你试图实现类似矩阵转置的东西,除了镜像。如果您正在进行各种操作,Numpy 很多更容易,更快。在这种情况下,使用numpy数组,您只需要执行以下操作:

import numpy as np # import numpy
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Here's your matrix
new_matrix_1 = matrix[::-1,:] # Here's your matrix with all the rows reversed: [[7,8,9],[4,5,6],[1,2,3]]
new_matrix = new_matrix_1.T # Here's the transpose of that, which is what you want.

虽然这只是一件事,但这会使所有更容易。例如,算术实际上可以工作:new_matrix+matrix2*new_matrix,等等。否则你必须手动实现它。

答案 1 :(得分:4)

为什么只要一次性完成矩阵,就可以用很小的步骤构建矩阵?

>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> new_matrix = zip(*matrix[::-1])
>>> new_matrix
[(7, 4, 1), (8, 5, 2), (9, 6, 3)]

或者,如果您确实需要行作为列表:

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

说明:

  • 首先[::-1]反转矩阵,即将其颠倒。这让我们更接近理想的结果。
  • zip然后通过组合其行来转置矩阵。 zip结果的第一个元素是每行的第一个元素的列表,即zip的第一个元素是第一个。依此类推,即zip会为您提供列的列表,即转置矩阵。

答案 2 :(得分:2)

自:

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

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

可以

完成
import numpy as np
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
matrix[::-1].T

答案 3 :(得分:0)

如果您已进入列表推导和内容:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
result = [ [ i[k] for i in matrix[::-1] ] for k in range(len(matrix)) ]