Python-Intersection de plusieurs listes?
Je joue avec python et je suis capable d'obtenir l'intersection de deux listes:
result = set(a).intersection(b)
Maintenant, si d
est une liste contenant a
et b
et un troisième élément de c
, est-il une fonction intégrée pour trouver l'intersection de tous les trois listes à l'intérieur de d
? Ainsi, par exemple,
d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
, Alors le résultat devrait être
[3,4]
4 réponses
Pour 2.4, Vous pouvez simplement définir une fonction d'intersection.
def intersect(*d):
sets = iter(map(set, d))
result = sets.next()
for s in sets:
result = result.intersection(s)
return result
Pour les nouvelles versions de python:
La méthode d'intersection prend une quantité arbitraire d'arguments
result = set(d[0]).intersection(*d[:1])
Alternativement, vous pouvez croiser le premier ensemble avec lui-même pour éviter de découper la liste et d'en faire une copie:
result = set(d[0]).intersection(*d)
Je ne suis pas vraiment sûr de ce qui serait le plus efficace et j'ai le sentiment que cela dépendrait de la taille du d[0]
et de la taille de la liste à moins que python n'ait un intégré vérifiez-le comme
if s1 is s2:
return s1
Dans la méthode d'intersection.
>>> d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
>>> set(d[0]).intersection(*d)
set([3, 4])
>>> set(d[0]).intersection(*d[1:])
set([3, 4])
>>>
@ user3917838
Agréable et simple, mais a besoin d'un casting pour le faire fonctionner et donner une liste en conséquence. Il devrait ressembler à:
list(reduce(set.intersection, [set(item) for item in d ]))
Où:
d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
Et le résultat est:
[3, 4]
Au moins en Python 3.4