2009-11-12 14 views

ответ

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

или:

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

Первоначально я начал с set(), теперь он исправлен. –

+1

Да, я отправил ответ, который изменил ваш и работал, но к тому времени, как я вернулся, вы его отредактировали. К сожалению, stackoverflow не позволит мне +1 вы, так как я его поддержал, а затем отключил мой upvote. Отличный ответ, хотя! –

6

В один лайнер:

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

или список (уменьшить (set.intersection, x [1:], установить (x [0]))) – grokus

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

reduce(f, x) 
0

Еще один способ решения, почти такой же, как Наде, но без использования снижения, и я использую карту:

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