我正在使用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]发布于 2010-10-04 12:16:23
对于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])
>>> 发布于 2010-10-04 12:18:51
set.intersection(*map(set,d))发布于 2016-10-12 17:12:13
@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]
至少在Python 3.4中
https://stackoverflow.com/questions/3852780
复制相似问题