包含重复元素的列表的副本

2024-04-25 15:15:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道一份和一份列表。但是,这个问题有点不同,因为我原来的列表是用元素相乘生成的。你知道吗

首先,我通过list_ori = [[0]*3]*3生成原始列表。 我想要的是修改[[0, 0, 0], [0, 0, 0], [0, 0, 0]],然后得到[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

我尝试了以下代码。你知道吗

import copy
list_ori = [[0]*3]*3
list_copy = copy.deepcopy(list_ori)
list_copy[0][0] =1 
print(list_copy)

因此,我得到了[[1, 0, 0], [1, 0, 0], [1, 0, 0]]。 但实际上,我想得到[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

我有两个简单的解决方案,但是我想知道有没有一个更清晰的方法来处理list_ori = [[0]*3]*3,通过深度复制然后修改它?你知道吗

两个简单的解决方案:

1
list_ori = [[0 for i in range(3)] for j in range(3)]
list_copy = copy.deepcopy(list_ori)
list_copy[0][0] =1 
print(list_copy)

我改变了名单。名单列表中没有重复的元素。你知道吗

2
m = n = 3
test = [[0] * m] * n
print(test)
test_copy =  [copy.copy(element) for element in test]
test_copy[0][0] = 1
print(test_copy)

此方法迭代列表的元素。这种方法会破坏列表的结构吗?你知道吗


Tags: 方法intest元素列表forrangeelement
1条回答
网友
1楼 · 发布于 2024-04-25 15:15:56

首先,使用list_ori = [[0 for i in range(3)] for j in range(3)],不需要深度复制,只需执行以下操作:

list_ori = [[0 for i in range(3)] for j in range(3)]
list_copy[0][0] = 1 
print(list_copy)

输出:

[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

相关问题 更多 >