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

Python中如何从列表返回仅出现一次的元素?(Codewars问题场景)

嘿,这个问题我当初刷Codewars的「Find the odd int」时也踩过坑!刚好可以给你分享几个实用又简便的方法,完美解决这类找“唯一出现奇数次元素”的问题~

方法1:手动用字典计数(你思路的完整实现)

既然你已经用到了字典,那可以把这个思路补全:先遍历列表统计每个数字的出现次数,再筛选出次数为奇数的那个值。

x = [5, 5, 2, 5, 5, 3, 3, 4, 4]
counts = {}
for num in x:
    # 用get方法避免键不存在的报错,默认计数0
    counts[num] = counts.get(num, 0) + 1

# 题目保证只有一个符合条件的数,直接取第一个结果
result = [num for num, cnt in counts.items() if cnt % 2 != 0][0]
print(result)  # 输出2

方法2:用collections.Counter(更简洁的标准库方案)

Python内置的Counter就是专门用来做元素计数的,用它能省掉手动写计数逻辑的步骤,代码更清爽:

from collections import Counter

x = [5, 5, 2, 5, 5, 3, 3, 4, 4]
# 用next直接取第一个符合条件的键(题目保证唯一)
result = next(num for num, cnt in Counter(x).items() if cnt % 2 != 0)
print(result)

方法3:异或运算(最巧妙的高效解法)

这是我后来发现的黑科技,利用异或的数学特性,能在O(1)的空间复杂度下解决问题:

  • 任何数和自身异或结果为0:a ^ a = 0
  • 任何数和0异或结果为自身:a ^ 0 = a
  • 异或满足交换律和结合律

把列表里所有数依次异或,最后剩下的就是那个出现奇数次的数:

x = [5, 5, 2, 5, 5, 3, 3, 4, 4]
result = 0
for num in x:
    result ^= num
print(result)  # 输出2

顺便提一句,我当初第一次做这个题也误解了题意,以为只是找“仅出现一次”的数,后来才发现题目是找出现奇数次的数(比如某个数出现3次也符合要求),不过上面的方法都能覆盖这两种情况~

内容的提问来源于stack exchange,提问作者user2467011

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:16:28