Trouver des éléments communs dans les listes

j'essaie d'écrire un morceau de code qui peut automatiquement factoriser une expression. Exemple, si j'ai deux listes [1,2,3,4] et [2,3,5], le code doit être en mesure de trouver les éléments communs dans les deux listes, [2,3], et de combiner le reste des éléments dans une nouvelle liste, [1,4,5].

à Partir de ce post: Comment trouver la liste intersection? Je vois que les éléments communs peuvent être trouvés par

set([1,2,3,4]&set([2,3,5]). 

Y a-t-il un moyen facile de récupérer des éléments non communs à partir de chaque liste, dans mon exemple étant [1,4] et [5]?

je peux aller de l'avant et faire une boucle for:

lists = [[1,2,3,4],[2,3,5]]
conCommon = []
common = [2,3]
for elem in lists:
    for elem in eachList:
    if elem not in common:
        nonCommon += elem

mais cela semble redondant et inefficace. Python fournit aucune fonction pratique qui peut le faire? Merci à l'avance!!

22
demandé sur Community 2012-07-05 20:09:20

3 réponses

utiliser l'opérateur de différence symétrique pour set s (alias l'opérateur XOR):

>>> set([1,2,3]) ^ set([3,4,5])
set([1, 2, 4, 5])
43
répondu Amber 2012-07-05 16:12:07

vous pouvez utiliser le concept D'Intersection pour traiter ce genre de problèmes.

b1 = [1,2,3,4,5,9,11,15]
b2 = [4,5,6,7,8]
set(b1).intersection(b2)
Out[22]: {4, 5}

la meilleure chose à propos de l'utilisation de ce code est qu'il fonctionne assez rapidement pour les grandes données aussi. J'ai b1 avec 607139 et b2 avec 296029 éléments quand j'utilise cette logique je reçois mes résultats en 2,9 secondes.

12
répondu saimadhu.polamuri 2015-08-18 07:56:41

vous pouvez utiliser la méthode d'attribut .__xor__ .

set([1,2,3,4]).__xor__(set([2,3,5]))

ou

a = set([1,2,3,4])
b = set([2,3,5])
a.__xor__(b)
0
répondu Vikram S 2017-06-01 07:25:00