我是编程的新手,但是我在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]]
为什么它会继续删除原始矩阵的第一列?救命!
答案 0 :(得分:3)
我建议您阅读一下shallow
和deep
副本之间的区别。
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]]