从http://www.learnpython.org/en/Sets学习Python时,我在集合之间遇到了symmetric_difference的概念。 我认为它给出了与套装上的“独占或”操作相同的输出。 它有什么不同?
答案 0 :(得分:3)
没有区别。 XORing设置通过调用symmetric_difference
函数来工作。这是来自sets.py中的集合的实现:
def __xor__(self, other):
"""Return the symmetric difference of two sets as a new set.
(I.e. all elements that are in exactly one of the sets.)
"""
if not isinstance(other, BaseSet):
return NotImplemented
return self.symmetric_difference(other)
def symmetric_difference(self, other):
"""Return the symmetric difference of two sets as a new set.
(I.e. all elements that are in exactly one of the sets.)
"""
result = self.__class__()
data = result._data
value = True
selfdata = self._data
try:
otherdata = other._data
except AttributeError:
otherdata = Set(other)._data
for elt in ifilterfalse(otherdata.__contains__, selfdata):
data[elt] = value
for elt in ifilterfalse(selfdata.__contains__, otherdata):
data[elt] = value
return result
正如您所看到的,XOR实现确保您确实只处理集合,但是没有区别。
答案 1 :(得分:1)
是的,它几乎是一样的,只是XOR是对布尔值的操作,而symmetric_difference
是对集合的操作。实际上,即使您的链接文档页面也说明了这一点:
要找出哪些成员参加了只有一个的活动,请使用" symmetric_difference"方法
您还可以看到this more detailed mathematical explanation关于逻辑XOR与集合上的对称差异之间的关系。