我的名单被修改了,我不知道为什么

2024-09-30 18:22:25 发布

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

我有一个小循环,循环一些数字,然后循环一个列表。如果第一个循环中的数字在循环中,则会将其删除。然而,我注意到这个ie被从列表列表中删除,而不是从withe循环中删除。下面的代码

num_list = [[1,2,3,4,5], [1,2,3,4,5]]
for num in [1,2,3,4,5]:
    for pimp in num_list:
        if num in pimp:
            pimp.remove(num)
        print(pimp)

但是,它在以下代码中工作正常:

for num in [1,2,3,4,5]:
    for pimp in [[1,2,3,4,5], [1,2,3,4,5]]:
        if num in pimp:
            pimp.remove(num)
        print(pimp)

有什么区别?我错过了什么


Tags: 代码in列表forif数字numremove
1条回答
网友
1楼 · 发布于 2024-09-30 18:22:25

当前,当您执行for pimp in num_list操作时,您正在迭代对原始列表的引用num_list。所以您在pimp中所做的更改会反映在原始嵌套的num_list中。为了避免这种情况,您需要在for循环中创建num_list的深度副本。这可以使用deepcopy来完成,它创建一个包含所有子列表的嵌套列表的副本

from copy import deepcopy

num_list = [[1,2,3,4,5], [1,2,3,4,5]]
for num in [1,2,3,4,5]:
    for pimp in deepcopy(num_list):
        if num in pimp:
            pimp.remove(num)
        print(pimp)

[2, 3, 4, 5]
[2, 3, 4, 5]
[1, 3, 4, 5]
[1, 3, 4, 5]
[1, 2, 4, 5]
[1, 2, 4, 5]
[1, 2, 3, 5]
[1, 2, 3, 5]
[1, 2, 3, 4]
[1, 2, 3, 4]

相关问题 更多 >