例如,假设我有一组不想要的联合组合:
bigSet = bigSet.union(<listOfSets>)
我可以简单地折叠每一组,即:
bigSet = reduce(lambda x,y: x.union(y), listOfSets)
另一种方法是使用eval函数:
stringTuple = str(listOfSets)
stringTuple = stringTuple.strip("[")
stringTuple = stringTupl.strip("]")
bigSet = eval("bigSet.union(" + stringTuple + ")")
我问的原因是因为在python2.6中,将多个参数传递给union(而不是将其折叠到一个联合列表中)优化了unioning,以便最小的集合首先被联合起来。因为python中的集合通常是非常大的数据集的最佳数据结构(特别是当它们需要联合或交叉时),并且看起来很常见,你需要传递不确定数量的集合,所以应该做一个更优化的方法。如果没有,哪个更快:使用eval或折叠整套?
答案 0 :(得分:5)
union
接受任意数量的集合作为参数:
In [28]: x.union(set([1,2]),set([2,3]),set([3,4]))
Out[28]: set([1, 2, 3, 4])
因此,您可以使用
结合集合列表bigSet = bigSet.union(*listOfSets)
答案 1 :(得分:0)
您希望将集合列表扩展为函数的参数列表,例如
sets = [set([1,2,3]), set([3,4,5]), set([5,6,7])]
union(*sets)