Python count()方法统计列表唯一元素结果错误问题排查
问题说明
- 待实现功能:接收整数列表输入,按元素在原列表中的顺序,输出所有仅出现一次的元素。
- 故障表现:现有代码运行异常,会将两位数、三位数的每一位识别为独立的单个数字做统计,无法输出正确结果。
原错误实现代码:
x = [] a = input() a.split(" ") for i in a: if a.count(i) == 1: x.append(i) print(x)
错误原因
代码有两个核心问题:
- 字符串的
split(" ")方法不会修改原始字符串,执行后会返回分割生成的新列表,原代码没有接收这个返回值,变量a始终是用户输入的完整字符串。此时遍历a等价于遍历字符串的每一个字符,自然会把多位数拆成单个数字处理。 - 原代码直接对原始输入字符串调用
count()方法,统计的是单个字符在整个输入串里的出现次数,统计逻辑完全不符合需求。
修正代码
推荐用collections.Counter做频次统计,时间效率更高,实现如下:
from collections import Counter # 读取输入,按空格分割后转为整数列表 num_list = list(map(int, input().split())) # 统计每个整数的出现次数 freq = Counter(num_list) # 按原顺序筛选仅出现一次的元素 result = [num for num in num_list if freq[num] == 1] print(result)
如果不想引入额外模块,也可以手动实现频次统计:
num_list = list(map(int, input().split())) freq = {} for num in num_list: freq[num] = freq.get(num, 0) + 1 result = [num for num in num_list if freq[num] == 1] print(result)
内容的提问来源于stack exchange,提问作者Анатолий Коцюба
相关产品推荐
相关产品推荐

