从python中的矩阵中删除行

时间:2016-02-16 09:47:29

标签: python python-2.7 python-3.x

我有matrix = [[1,2,3],[4,5,6],[7,8,9]]matrix2=matrix。现在我想删除matrix2中的第一行,即matrix2.remove(matrix[0])

但我得到了这个

>>> matrix2.remove(matrix2[0])
>>> matrix2
    [[4, 5, 6], [7, 8, 9]]
>>> matrix
    [[4, 5, 6], [7, 8, 9]]

matrix的第一行也被删除。有谁能解释一下?如何在不改变matrix2

的情况下从matrix删除第一行

3 个答案:

答案 0 :(得分:3)

尝试:

>>> matrix = [[1,2,3],[4,5,6],[7,8,9]]
>>>
>>> # make matrix2 a (shallow) copy of matrix
>>> matrix2 = matrix[:]
>>> matrix2.remove(matrix[0])
>>> print(matrix2)
[[4, 5, 6], [7, 8, 9]]
嗯......为什么?这是因为声明matrix2 = matrix没有"复制"值...仅表示名称 matrix2指向与名称 matrix完全相同的值。

要实际创建列表的(浅)副本,我们可以将其切片为matrix2 = matrix[:]。这会创建一个名称 matrix2,指向包含名称的所有值的新列表 matrix

答案 1 :(得分:2)

您可以使用标准库中的复制模块:

from copy import deepcopy

matrix = [[1,2,3],[4,5,6],[7,8,9]]
matrix2 = deepcopy(matrix)

matrix2.remove(matrix2[0])

matrix
[Out]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix2
[Out]: [[4, 5, 6], [7, 8, 9]]

答案 2 :(得分:2)

List是可变类型,当您使用赋值运算符将其赋值给另一个变量(matrix2=matrix)时,它只引用同一个对象,意味着两个引用变量(matrix2,matrix)引用相同的对象。所以在这种情况下,我们需要使用copy.copy()copy.deepcopy()复制实际对象,并将函数分配给另一个变量。我在这里使用copy.copy()

from copy import *

matrix = [[1,2,3],[4,5,6],[7,8,9]] 
matrix1 = copy(matrix)    
matrix1.remove(matrix1[0])

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