2024-05-16 23:07:15 发布
网友
我有一个集合列表:
setlist = [s1,s2,s3...]
我要s1∩s2∩s3。。。
我可以编写一个函数来执行一系列成对的s1.intersection(s2)等操作
s1.intersection(s2)
是否有推荐的、更好的或内置的方法?
从2.6开始,set.intersection可以任意多个iterable。
set.intersection
>>> s1 = set([1, 2, 3]) >>> s2 = set([2, 3, 4]) >>> s3 = set([2, 4, 6]) >>> s1 & s2 & s3 set([2]) >>> s1.intersection(s2, s3) set([2]) >>> sets = [s1, s2, s3] >>> set.intersection(*sets) set([2])
从Python version 2.6开始,您可以使用多个参数来^{},比如
u = set.intersection(s1, s2, s3)
如果集合在列表中,则转换为:
u = set.intersection(*setlist)
其中*a_list是list expansion
*a_list
注意set.intersection不是静态方法,而是使用函数表示法来应用第一个集合与列表其余部分的交集。因此,如果参数列表为空,这将失败。
显然,这里需要的是set.intersection,但如果您需要“取所有这些的和”、“取所有这些的积”、“取所有这些的异或”的泛化,那么您需要的是reduce函数:
reduce
from operator import and_ from functools import reduce print(reduce(and_, [{1,2,3},{2,3,4},{3,4,5}])) # = {3}
或者
print(reduce((lambda x,y: x&y), [{1,2,3},{2,3,4},{3,4,5}])) # = {3}
从2.6开始,
set.intersection
可以任意多个iterable。从Python version 2.6开始,您可以使用多个参数来^{} ,比如
如果集合在列表中,则转换为:
其中
*a_list
是list expansion注意
set.intersection
不是静态方法,而是使用函数表示法来应用第一个集合与列表其余部分的交集。因此,如果参数列表为空,这将失败。显然,这里需要的是
set.intersection
,但如果您需要“取所有这些的和”、“取所有这些的积”、“取所有这些的异或”的泛化,那么您需要的是reduce
函数:或者
相关问题 更多 >
编程相关推荐