для 2,4, вы можете просто определить функцию пересечения.
def intersect(*d):
sets = iter(map(set, d))
result = sets.next()
for s in sets:
result = result.intersection(s)
return result
для более новых версий python:
метод пересечения принимает произвольное количество аргументов
result = set(d[0]).intersection(*d[:1])
альтернативно, вы можете пересекать первый набор с самим собой, чтобы избежать нарезки списка и создания копии:
result = set(d[0]).intersection(*d)
Я не совсем уверен, что будет более эффективным, и у меня будет ощущение, что это будет зависеть от размера d[0]
и размера списка, если в python нет встроенной проверки для него, например
if s1 is s2:
return s1
в методе пересечения.
>>> 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])
>>>