在Python中从新矩阵中删除列而不改变原始矩阵

3

我是一个新手程序员,正在使用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个回答

3

我建议阅读有关浅拷贝深拷贝之间区别的内容。

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]]

2

替换:

new_matrix = matrix.copy()

使用:

new_matrix = copy.deepcopy(matrix)

因为第一个只复制了第一层,即(列表的列表引用)


2

您需要导入Python中内置的copy库,然后使用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]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接