Python – 多个列表的交互?
我正在玩python,并能够得到两个列表的交集:
result = set(a).intersection(b)
现在如果d
是一个包含a
和b
和第三个元素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中