Что такое 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 и симметричной разностью на множествах.