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

Python多集合symmetric_difference运算两种结果哪个正确?

三个集合对称差的正确结果解析

首先明确核心:集合的对称差(symmetric difference)在数学上的定义是,保留那些在奇数个集合中出现的元素(出现1次、3次等都算,只要次数不是偶数)。

先统计你给出的三个集合中每个元素的出现次数:

  • 1:在primes、odds、threes中都存在 → 3次(奇数)
  • 2:仅在primes中 → 1次(奇数)
  • 3:在primes、odds、threes中都存在 →3次(奇数)
  • 5:在primes、odds中存在 →2次(偶数)
  • 7:在primes、odds中存在 →2次(偶数)
  • 9:在odds、threes中存在 →2次(偶数)
  • 11:在primes、odds中存在 →2次(偶数)
  • 6:仅在threes中 →1次(奇数)
  • 12:仅在threes中 →1次(奇数)

按照对称差的定义,正确结果应该是{1, 2, 3, 6, 12},你提到的两种结果都有问题:

  • 结果a({2, 3, 6, 12})漏了元素1,属于计算失误;
  • 结果b({2, 6, 12})错误地只保留了出现恰好1次的元素,完全忽略了出现3次的元素,不符合对称差的定义。

Python中用^运算符计算多集合对称差的逻辑是对的——它会累积计算对称差,最终保留所有出现奇数次的元素。你看到的GeeksforGeeks上的方法,其实是另一种需求(找仅出现一次的元素),和对称差不是一回事。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:17:14