什么是Python symmetric_difference,它与XOR操作有什么不同?

时间:2015-08-31 11:47:52

标签: python set xor symmetric-difference

http://www.learnpython.org/en/Sets学习Python时,我在集合之间遇到了symmetric_difference的概念。 我认为它给出了与套装上的“独占或”操作相同的输出。 它有什么不同?

2 个答案:

答案 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与集合上的对称差异之间的关系。