在每种可能的组合中调用函数

时间:2017-03-31 23:23:23

标签: python algorithm computer-science combinatorics

我有一份功能列表。我想调用这些函数的每种可能组合,其中每个函数被调用一次或根本不被调用。它们所处的顺序并不重要。

示例:

functionList = [function1, function2, function3]

我想自己调用function1(),还有function1()+ function2()以及function1()+ function2()+ function3()以及function2()等

我如何在python中实现它?我想使用itertools.combinations,但似乎我不能用它来解决我的问题。

2 个答案:

答案 0 :(得分:2)

itertools运行正常。但是你需要通过你想要使用的数字...在1和你的集合中的数字之间。不确定你是否需要0作为退化案例。以下作品。它可以被压缩,但它是非常可读的。查找" python函数指针"。

List<Type>

答案 1 :(得分:1)

您可以使用itertools recipe page

中的powerset功能
from itertools import chain, combinations

def powerset(iterable):
    """
    powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)
    """
    xs = list(iterable)
    # note we return an iterator rather than a list
    return chain.from_iterable(combinations(xs,n) for n in range(len(xs)+1))

def f1():
    return "f1"

def f2():
    return "f2"

def f3():
    return "f3"

functions = [f1, f2, f3]

for function_comb in powerset(functions):
   out = ""
   if not function_comb:
      continue # skip the empty set of functions
   for f in function_comb:
      out += f()
   print out

它产生以下输出:

f1
f2
f3
f1f2
f1f3
f2f3
f1f2f3