在不更改原始矩阵的情况下从Python中的新矩阵删除列

时间:2020-07-25 06:27:34

标签: python matrix

我是编程的新手,但是我在Python中一直陷入这个问题。请注意,我无法在此代码中使用numPy。所以我将矩阵复制到new_matrix。我想删除new_matrix中的第一行和第一列而不更改原始矩阵中的任何内容。这是代码:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_matrix = matrix.copy()
print('old: ', matrix)
print('new: ', new_matrix)

for i in range(len(new_matrix)):
    del new_matrix[i][0]
print('old: ', matrix)
print('new: ', new_matrix)

del new_matrix[0]
print('old: ', matrix)
print('new: ', new_matrix)

结果是这样的:

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

为什么它会继续删除原始矩阵的第一列?救命!

3 个答案:

答案 0 :(得分:3)

我建议您阅读一下shallowdeep副本之间的区别。

import copy

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

print('old: ', matrix)
print('new: ', new_matrix)

for i in range(len(new_matrix)):
    del new_matrix[i][0]
    
print('old: ', matrix)
print('new: ', new_matrix)

del new_matrix[0]
print('old: ', matrix)
print('new: ', new_matrix)

输出:

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

答案 1 :(得分:2)

替换:

new_matrix = matrix.copy()

具有:

new_matrix = copy.deepcopy(matrix)

因为第一个仅复制第一级(列表引用列表)

答案 2 :(得分:2)

您必须import copy用Python内置的libraray,然后执行deepcopy()

import copy
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_matrix = copy.deepcopy(matrix)

print('old: ', matrix)
print('new: ', new_matrix)

for i in range(len(new_matrix)):
    del new_matrix[i][0]
print('old: ', matrix)
print('new: ', new_matrix)

del new_matrix[0]
print('old: ', matrix)
print('new: ', new_matrix)

输出

old:  [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new:  [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
old:  [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new:  [[2, 3], [5, 6], [8, 9]]
old:  [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new:  [[5, 6], [8, 9]]
相关问题