Python – 多个列表的交互?

我正在玩python,并能够得到两个列表的交集:

result = set(a).intersection(b) 

现在如果d是一个包含ab和第三个元素c ,是否有一个内置函数用于查找d中所有三个列表的交集? 所以举个例子,

 d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]] 

那么结果应该是

 [3,4] 

对于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]) >>> 
 set.intersection(*map(set,d)) 

Lambda减less。

 from functools import reduce #you won't need this in Python 2 reduce(set.intersection, [[1, 2, 3, 4], [2, 3, 4], [3, 4, 5, 6, 7]]) 

@ user3917838

不错,简单,但需要一些铸造,使其工作,并作为结果列出。 它应该看起来像:

list(reduce(set.intersection, [set(item) for item in d ]))

哪里:

d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]

结果是:

[3, 4]

至less在Python 3.4中