我正在尝试为某人调试一些代码,并且遇到了一个相当奇怪的情况。该代码的目的是在给定列表中搜索重复项,然后返回一个没有重复项的列表。(请注意,编写代码的人选择简单地从列表中删除重复项,而我个人只是将每个值添加到一个新列表中。但是,我仍然对这种奇怪现象很感兴趣)。代码如下:
def remove_duplicates(duplicates):
duplicates_del = duplicates
for i in duplicates_del:
if duplicates_del.count(i) > 1:
duplicates_del.remove(i)
return duplicates_del
remove_duplicates([3, 3, 3, 3, 3, 3])
运行时,代码会返回[3, 3, 3]
,经过一些调试,我发现代码可以正常工作,直到duplicates_del.count(i)
等于4。在下一轮,它将完全跳过for语句中的所有内容,直接进入return语句,导致我们得到的答案。
我了解到,将 if 语句更改为while duplicates_del.count(i) > 1:
将使代码完美运行。
我查看了调试器的代码,并了解到有一个可以忽略计数的断点类。if 语句是否以某种方式触发了此断点,或者是否还有其他原因导致代码无法使用 if 语句而不是 while 循环完全运行?