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
相关产品推荐
相关产品推荐

