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] 

4 Solutions collect form web for “Python – 多个列表的交互?”

对于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中

  • 如何将逻辑运算符应用于Python列表中的所有元素
  • pandas iloc vs ix vs loc解释?
  • 在Python中,dict.pop(a,b)是什么意思?
  • “is None”和“== None”之间的区别是什么?
  • 如何迭代Python,几天,几个小时,几周,几个月后的时间跨度?
  • 我应该总是在`except`语句中指定一个exceptiontypes吗?
  • 重新加载模块给NameError:name'reload'没有被定义
  • django order_by查询设置,升序和降序
  • 需要一个快速的方法来统计和总结一遍可迭代
  • 如何在Python中取消一个urlencoded unicodestring?
  • 基于边缘像素图的图像分割