以各种可能的组合调用函数

2024-06-16 18:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数列表。我想调用这些函数的每个可能组合,其中每个函数要么调用一次,要么根本不调用。他们的顺序无关紧要。你知道吗

示例:

functionList = [function1, function2, function3]

我想单独调用function1(),还有function1()+function2(),还有function1()+function2()+function3(),还有function2()等等

我将如何在python中实现这一点?我想用itertools.组合然而,似乎我不能用它来解决我的问题。你知道吗


Tags: 函数示例列表顺序itertoolsfunction1function2function3
2条回答

itertools运行良好。但是你需要检查你想用的数字…在1和你的集合中的数字之间。不确定是否需要0作为退化情况。以下工作。它可以被压缩,但它是相当可读的。查找“python函数指针”。你知道吗

import itertools as it

def f1():
    return 1

def f2():
    return 2

def f3():
    return 3

functionList = [f1, f2, f3]
fsets = set([])
for num in range(1, len(functionList)+1):
    for combo in it.combinations(functionList, num):
        fsets.add(combo)

for fc_combo in fsets:
  temp = 0
  for f in fc_combo:
      temp += f()
  print temp

可以使用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

相关问题 更多 >