Что такое Python симметричная_дифференция и чем она отличается от операции XOR?

При изучении Python с http://www.learnpython.org/en/Sets я столкнулся с понятием симметричной разницы между наборами. Я думал, что он дает тот же результат, что и операции "исключение или" на множествах. Чем это отличается?

2 ответа

Нет никакой разницы. 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 гарантирует, что вы действительно работаете только с наборами, но в остальном различий нет.

Да, это почти то же самое, просто XOR - это операция над логическими значениями, и symmetric_difference это операция на множествах. На самом деле, даже ваша связанная страница документации говорит это:

Чтобы выяснить, какие участники посетили только одно из событий, используйте метод "mmetric_difference"

Вы также можете увидеть это более подробное математическое объяснение взаимосвязи между логическим XOR и симметричной разностью на множествах.

Другие вопросы по тегам