Противоположность 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,4,5,6}
b={5,6,4,9}
c=(a^b)&b
print(c) # you got {9}

Лучший способ - это понимание списка.

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]Надеюсь, это сработает

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