Противоположность set.intersection в python?
В Python вы можете использовать a.intersection(b)
чтобы найти предметы, общие для обоих наборов.
Есть ли способ сделать непересекающуюся противоположную версию этого? Элементы, которые не являются общими для обоих a
а также b
; уникальные предметы в a
объединены с уникальными предметами в b
?
4 ответа
Вы ищете симметричную разницу; все элементы, которые появляются только в наборе a или в наборе b, но не в обоих:
a.symmetric_difference(b)
От set.symmetric_difference()
методическая документация:
Вернуть новый набор с элементами либо в наборе, либо в другом, но не в обоих.
Вы можете использовать ^
оператор тоже, если оба a
а также b
наборы:
a ^ b
в то время как set.symmetric_difference()
принимает любую итерацию для другого аргумента.
Выход является эквивалентом (a | b) - (a & b)
, объединение обоих множеств минус пересечение обоих множеств.
Лучший способ - это понимание списка.
a = [ 1,2,3,4]
b = [ 8,7,9,2,1]
c = [ element for element in a if element not in b]
d = [ element for element in b if element not in a]
print(c)
# output is [ 3,4]
print(d)
# output is [8,7,9]
Вы можете присоединиться к обоим спискам
е, е два списка, которые вы хотите проверить непересекающиеся
a = [1,2,3,4]
b = [8,7,9,2,1]
c = []
def loop_to_check(e,f):
for i in range(len(e)):
if e[i] not in f:
c.append(e[i])
loop_to_check(a,b)
loop_to_check(b,a)
print(c)
## output is [3,4,8,7,9]
Это зацикливается на список и возвращает непересекающийся список
Попробуйте этот код для (set(a) - пересечение (a&b))
a = [1,2,3,4,5,6]
b = [2,3]
for i in b:
if i in a:
a.remove(i)
print(a)
выход [1,4,5,6]
Надеюсь, это сработает