Как найти общие элементы в списке списков?

Я пытаюсь выяснить, как сравнить n количество списков, чтобы найти общие элементы. Например:

p=[ [1,2,3],
    [1,9,9],
      ..
      ..
    [1,2,4]

>> print common(p)
>> [1]

Теперь, если я знаю количество элементов, я могу делать сравнения, например:

for a in b:
  for c in d:
    for x in y:
...

но это не работает, если я не знаю, сколько элементов p. Я рассмотрел это решение, которое сравнивает два списка qaru.site/info/29560/...

но, проведя 4 часа, пытаясь понять способ сделать это рекурсивным, решение все еще ускользает от меня, поэтому любая помощь будет высоко оценена!

Ответы

Ответ 1

Вы ищете множество пересечений всех подписок, а тип данных, который вы должны использовать для заданий набора, - это набор:

result = set(p[0])
for s in p[1:]:
    result.intersection_update(s)
print result

Ответ 2

>>> p=[ [1,2,3],
    [1,9,9],
    [1,2,4]]
>>> set(p[0]).intersection(*p)
set([1])

Ответ 3

Почему не просто:

set.intersection(*map(set, p))

Результат:

set([1])

Или вот так:

ip = iter(p)
s = set(next(ip))
s.intersection(*ip)

Результат:

set([1])

изменить:

скопировано из консоли:

>>> p = [[1,2,3], [1,9,9], [1,2,4]]
>>> set.intersection(*map(set, p))
set([1])
>>> ip = iter(p)
>>> s = set(next(ip))
>>> s.intersection(*ip)
set([1])

Ответ 4

reduce(lambda x, y: x & y, (set(i) for i in p))

Ответ 5

p=[ [1,2,3],
    [1,9,9],
    [1,2,4]]

ans = [ele[0] for ele in zip(*p) if len(set(ele)) == 1]

Результат:

>>> ans
[1]

Ответ 6

Простое решение (однострочное):

set.intersection(*[set(list) for list in p])

Ответ 7

Вы ищете множество пересечений всех подписок, а тип данных, который вы должны использовать для заданий набора, - это набор:

result = set(p[0])  
for s in p[1:]:
   result.intersection_update(s)
print result

Однако в списке есть ограничение на 10 списков. Все более крупные причины "результат" список не работает. Предполагая, что вы сделали "результат" в списке list(result).

Удостоверьтесь, что вы result.sort(), чтобы обеспечить его упорядочение, если вы зависите от него таким образом.