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