web-dev-qa-db-fra.com

En face de set.intersection en python?

Dans Python vous pouvez utiliser a.intersection(b) pour trouver les éléments communs aux deux ensembles.

Existe-t-il un moyen de faire la disjoint version opposée de cela? Éléments qui ne sont pas communs à la fois à a et b; les éléments uniques dans a réunis avec les éléments uniques dans b?

45
user4847061

Vous recherchez la différence symétrique ; tous les éléments qui apparaissent uniquement dans l'ensemble a ou dans l'ensemble b, mais pas les deux:

a.symmetric_difference(b)

A partir de la documentation de la méthode set.symmetric_difference() :

Renvoyer un nouvel ensemble avec des éléments dans l'ensemble ou autre mais pas les deux.

Vous pouvez également utiliser l'opérateur ^, Si les deux a et b sont des ensembles:

a ^ b

tandis que set.symmetric_difference() prend tout itérable pour l'argument autre .

La sortie est l'équivalent de (a | b) - (a & b), L'union des deux ensembles moins l'intersection des deux ensembles.

82
Martijn Pieters

La meilleure façon est une compréhension de la liste.

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]

Vous pouvez rejoindre les deux listes

1
Apeasant
a={1,2,4,5,6}
b={5,6,4,9}
c=(a^b)&b
print(c) # you got {9}
1
Kaung Yar Zar

e, f sont deux listes que vous voulez vérifier disjointes

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]

Cela fait le tour de la liste et renvoie la liste disjointe

0
chandra singh

Essayez ce code pour (set (a) - intersection (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)

la sortie est [1,4,5,6] J'espère que ça marchera

0