2009-11-12 14 views

Répondre

8
common = set(x[0]) 
for l in x[1:]: 
    common &= set(l) 
print list(common) 

ou:

import operator 
print reduce(operator.iand, map(set, x)) 
+0

J'ai d'abord commencé avec set(), c'est corrigé maintenant. –

+1

Oui, j'ai posté une réponse qui a modifié la vôtre et qui a fonctionné, mais au moment où je suis revenu, vous l'avez édité. Malheureusement, stackoverflow ne me laissera pas vous +1, puisque j'ai upvoted, puis défait mon upvote. Bonne réponse cependant! –

6

Dans une doublure:

>>> reduce(set.intersection, x[1:], set(x[0])) 
set([3, 4]) 
+0

ou liste (reduce (set.intersection, x [1:], set (x [0]))) – grokus

1
def f(a, b): 
    return list(set(a).intersection(set(b))) 

reduce(f, x) 
0

une autre façon de résoudre, presque la même que nadia mais sans utiliser de réduire, et j'utiliser la carte:

>>> x = [ [1, 2, 3, 4], [3, 4, 6, 7], [2, 3, 4, 6, 7]] 
>>> set.intersection(*map(set,x)) 
set([3, 4]) 
>>> 
Questions connexes