Python使用for循环删除列表重复值时count计数异常问题
Python重复元素删除代码计数异常原因
你提供的代码如下:
list = [1,1,3,4,5,5,5,6] count = 0 for i in range(len(list)): for k in range(len(list)): if i == k : continue elif list[i] == list[k]: del list[k] list.append("0") count = count + 1 print(count) print(list)
核心问题点
- 重复统计追加的填充0:你每删除一个元素就向末尾追加
"0",后续循环遍历到填充的"0"时,只要两个索引位置的元素都是"0",就会被判定为重复元素触发删除和计数逻辑,这是count数值远超预期的最主要原因。 - 遍历逻辑未过滤已处理的有效元素:你没有标记已经完成去重的元素,同一个重复项会被多次判定:比如索引0的1和索引1的1重复,删除索引1的1后,当外层循环遍历到索引1时(此时该位置已经是后续前移的3)不会有问题,但当外层循环遍历到后面的
"0"元素时,所有"0"会互相判定为重复,反复触发计数。 - 动态修改列表时的索引偏移问题:你在遍历过程中删除列表元素,会导致当前k索引之后的元素整体前移一位,但k值会继续按原顺序递增,会跳过部分元素的校验,进一步打乱去重逻辑。
修正方案参考
如果要实现需求,可以先记录原始列表的有效元素范围,用集合记录已经出现过的元素,单次遍历即可完成:
original_list = [1,1,3,4,5,5,5,6] seen = set() count = 0 res = [] for num in original_list: if num not in seen: seen.add(num) res.append(num) else: count +=1 # 末尾补0 res += ["0"]*count print(count) # 输出3 print(res) # 输出[1,3,4,5,6,"0","0","0"]
内容的提问来源于stack exchange,提问作者Dilshan Siriwardhane
相关产品推荐
相关产品推荐

