You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表去重代码异常求助:无法移除第4索引重复元素

嘿,我来帮你搞定这个问题!首先咱们先拆解一下你代码里的两个核心问题:

问题1:逻辑不符合“去重”需求

你原本的想法应该是移除重复的元素,保留每个数字至少一次(也就是常说的“去重”),但你的代码逻辑是:只要某个数字出现次数大于1,就把这个数字的所有实例全部删掉。比如输入1 2 2 3,你的代码会输出[1,3],而不是预期的[1,2,3]。这是逻辑方向错啦。

问题2:遍历列表时修改列表导致元素跳过

即使你想删除所有重复出现的数字,你的代码也会因为在for j in num遍历过程中修改列表(执行num.remove(j))而出错。Python的for循环遍历列表时,会维护一个内部索引,每次循环取当前索引的元素然后索引+1。如果在循环中删除了前面的元素,后面的元素会往前移位,导致下一次循环跳过了某个元素。比如原列表是[a,b,c,d,e],当遍历到b时删除它,列表变成[a,c,d,e],下一次循环索引会跳到2,直接取d,跳过了c——这就是你说的“第4索引位置的重复数字没被移除”的原因。

修复方案

根据你的需求(去重后保留唯一值,再输出最大值),给你两种简单的实现方式:

方式1:用集合快速去重(最简单,不保留原顺序)

集合(set)天然会自动去重,只需要把列表转成集合再转回列表就行:

array = input()
nums = list(map(int, array.split()))
unique_nums = list(set(nums))
print(unique_nums)
print(max(unique_nums))

注意:集合是无序的,所以输出的unique_nums顺序可能和原输入不一样,如果需要保持原顺序,看方式2。

方式2:遍历列表手动去重(保留原顺序)

用一个辅助集合记录已经见过的数字,遍历原列表时只把没见过的数字加入新列表:

array = input()
nums = list(map(int, array.split()))
unique_nums = []
seen = set()
for num in nums:
    if num not in seen:
        seen.add(num)
        unique_nums.append(num)
print(unique_nums)
print(max(unique_nums))

这种方式既完成了去重,又能保持元素在原列表中的出现顺序,同时避免了遍历原列表时修改它的问题。

如果你原本的需求确实是删除所有出现过多次的数字(也就是只保留出现一次的数字),那可以调整逻辑,先统计每个数字的出现次数,再筛选出次数为1的:

array = input()
nums = list(map(int, array.split()))
count = {}
for num in nums:
    count[num] = count.get(num, 0) + 1
filtered_nums = [num for num in nums if count[num] == 1]
print(filtered_nums)
# 注意如果filtered_nums为空的话max会报错,这里可以加个判断
print(max(filtered_nums) if filtered_nums else "没有唯一数字")

内容的提问来源于stack exchange,提问作者M. Ammar Raza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:27:53