取python中任意数量的列表的交集

the*_*ace 4 python algorithm intersection list

假设我有一个完全相同的元素列表列表(int在本例中我将使用s)

[range(100)[::4], range(100)[::3], range(100)[::2], range(100)[::1]]
Run Code Online (Sandbox Code Playgroud)

采用这些列表的交集是一种很好的和/或有效的方法(所以你会获得每个列表中的每个元素)?对于以下示例:

[0, 12, 24, 36, 48, 60, 72, 84, 96]
Run Code Online (Sandbox Code Playgroud)

Mik*_*ham 7

使用具有交集方法的集合.

>>> s = set()
>>> s.add(4)
>>> s.add(5)
>>> s
set([4, 5])
>>> t = set([2, 4, 9])
>>> s.intersection(t)
set([4])
Run Code Online (Sandbox Code Playgroud)

对于你的例子,像

>>> data = [range(100)[::4], range(100)[::3], range(100)[::2], range(100)[::1]]
>>> sets = map(set, data)
>>> print set.intersection(*sets)
set([0, 96, 36, 72, 12, 48, 84, 24, 60])
Run Code Online (Sandbox Code Playgroud)