2015-04-29 4 views
17

В Python вы можете использовать a.intersection(b), чтобы найти элементы, общие для обоих наборов.Напротив set.intersection в python?

Есть ли способ сделать disjoint противоположной версией этого? Элементы, которые не являются общими для обоих a и b; уникальные предметы в a объединены с уникальными товарами в b?

ответ

37

Вы ищете симметричное различие; все элементы, которые появляются только в наборе а или в комплекте б, но не оба:

a.symmetric_difference(b) 

От set.symmetric_difference() method documentation:

Возвращения новый набор с элементами в любом наборе или другой но не и то и другое.

Вы можете использовать оператор ^ тоже, если оба a и b наборы:

a^b 

в то время как set.symmetric_difference() принимает любую итерацию для других аргумента.

Выходной сигнал эквивалентен (a | b) - (a & b), объединение обоих наборов минус пересечение обоих множеств.

+0

Это не нормальный оператор XOR? – user4847061

+0

@ user4847061: это, но наборы перегрузили несколько таких операторов. '|' и '&' обычно побитовое ИЛИ и побитовое И, но на множествах они дают вам союз и пересечение. Операторы сравнения '<', '<=', '>' и '> =' также были перегружены. –