gpt4 book ai didi

python - 删除列表中的重复项。为什么我的代码出错?

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:56 24 4
gpt4 key购买 nike

我正在尝试编写代码来删除列表中的重复项。这是第一个:

a = [2,2,1,1,1,2,3,6,6]
b = [2,2,1,1,1,2,3,6,6]
for x in a:
a.remove(x)
if x in a:
b.remove(x)
print('the list without duplicates is: ', b)

不幸的是,它产生了这样的结果:

the list without duplicates is: [2, 1, 2, 3, 6] 

然后我尝试写第二个:

a = [2,2,1,1,1,2,3,6,6]
b = [2,2,1,1,1,2,3,6,6]
for i in range(len(a)):
for x in a:
a.remove(x)
if x in a:
b.remove(x)
print('the list without duplicates is: ', b)

第二个产生的结果符合我的预期:

the list without duplicates is:  [1, 2, 3, 6]

我真的不明白为什么第二个与第一个不同。事实上,如果我申请该列表:

[2,2,1,1,2,3,6,6]

两者产生相同的结果:

the list without duplicates is:  [1, 2, 3, 6]

最佳答案

为什么第二个不同

for 循环跟踪它所在的索引。。当您从列表中删除一个项目时,它会弄乱计数:索引 i+1 处的项目现在已成为索引 i 处的项目并获取 在下一次迭代中跳过

举例说明:

a_list = ['a','b','c','d','e','f','g','h']
for i, item in enumerate(a_list):
print(f"i:{i}, item:{item}, a_list[i+1]:{a_list[i+1]}")
print(f"\tremoving {item}", end = ' ---> ')
a_list.remove(item)
print(f"a_list[i+1]:{a_list[i+1]}")
>>>
i:0, item:a, a_list[i+1]:b
removing a ---> a_list[i+1]:c
i:1, item:c, a_list[i+1]:d
removing c ---> a_list[i+1]:e
i:2, item:e, a_list[i+1]:f
removing e ---> a_list[i+1]:g
i:3, item:g, a_list[i+1]:h
....
<小时/>

您的第二个解决方案之所以有效,是因为即使您在 for 循环中跳过 项,您也添加了一个外部循环来重新访问该流程并对这些跳过 项进行操作。在最后一次迭代中,由于您跳过项,因此始终会留下一个重复值。

关于python - 删除列表中的重复项。为什么我的代码出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48232726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com