对于在python中接收不确定数量的参数的函数,如何传入不确定数量的参数

时间:2011-02-23 04:49:17

标签: python variables set functional-programming

例如,假设我有一组不想要的联合组合:

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或折叠整套?

2 个答案:

答案 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)

Note the asterisk

答案 1 :(得分:0)

您希望将集合列表扩展为函数的参数列表,例如

sets = [set([1,2,3]), set([3,4,5]), set([5,6,7])] 
union(*sets)