在Python有没有办法追加到后面?
In Python is there any way to 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]
如果您需要更多说明,请直接询问。
是的。使用 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。如果您经常向列表的开头添加元素,您可能需要考虑是否可以反转您正在做的事情。
另外,请注意您完成操作的方式,这会给您 new_matrix 的 [4,[1]]。我不太确定你想要什么:如果你想要你描述的最终结果,那么你需要 new_matrix = [1]
。如果您的代码正确 (new_matrix = [[1]]
),并且您想要 [[4,1]]
,那么您需要执行 new_matrix[0].insert(0,4)
。如果你想要 [[4],[1]]
,你需要做 new_matrix.insert(0,[4])
,依此类推。
顺便说一句,既然你似乎在用矩阵做事,你有没有考虑过使用 numpy?
(我想指出,如果这个答案看起来有点离题,那是因为这个问题被编辑成与最初提出的问题完全不同的问题。)
至于新问题:虽然 Stefan 的回答很好 python,但您可能给自己做了太多工作。很明显,您正在尝试实现类似于矩阵转置的东西,但镜像除外。如果您要进行这些操作,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+matrix
、2*new_matrix
,等等。否则您必须手动实施。
既然一次就可以完成,为什么还要一步步构建矩阵?
>>> 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 为您提供列列表,即转置矩阵。
发件人:
[[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
如果您对列表理解和其他东西感兴趣:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
result = [ [ i[k] for i in matrix[::-1] ] for k in range(len(matrix)) ]
我有一个矩阵:
[[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]
如果您需要更多说明,请直接询问。
是的。使用 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。如果您经常向列表的开头添加元素,您可能需要考虑是否可以反转您正在做的事情。
另外,请注意您完成操作的方式,这会给您 new_matrix 的 [4,[1]]。我不太确定你想要什么:如果你想要你描述的最终结果,那么你需要 new_matrix = [1]
。如果您的代码正确 (new_matrix = [[1]]
),并且您想要 [[4,1]]
,那么您需要执行 new_matrix[0].insert(0,4)
。如果你想要 [[4],[1]]
,你需要做 new_matrix.insert(0,[4])
,依此类推。
顺便说一句,既然你似乎在用矩阵做事,你有没有考虑过使用 numpy?
(我想指出,如果这个答案看起来有点离题,那是因为这个问题被编辑成与最初提出的问题完全不同的问题。)
至于新问题:虽然 Stefan 的回答很好 python,但您可能给自己做了太多工作。很明显,您正在尝试实现类似于矩阵转置的东西,但镜像除外。如果您要进行这些操作,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+matrix
、2*new_matrix
,等等。否则您必须手动实施。
既然一次就可以完成,为什么还要一步步构建矩阵?
>>> 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 为您提供列列表,即转置矩阵。
发件人:
[[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
如果您对列表理解和其他东西感兴趣:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
result = [ [ i[k] for i in matrix[::-1] ] for k in range(len(matrix)) ]