0

可能重复:
在 Python 中获取一系列列表的笛卡尔积

假设我有一个长度为 n 的数组,代表 n 个变量,以及一个包含 n 个变量的函数 f。我想对应用于某个有限集合(即 {0,1})中 n 个变量的所有值的 f 求和。从概念上讲,它会类似于

for x[1] in {0,1}:
  for x[2] in {0,1}:
     ... 
       sum += f(x[1], ..., x[n])

但显然你不能写这个。

有没有一种很好的方法来做到这一点,比如在 Python 中?(对于 {0,1} 中值的特殊情况,我可以循环从 0 到 2^n-1 的整数的二进制表示,但我想要一个更通用的解决方案)。

4

1 回答 1

0
# f is a function
# K is a list of possible values your variable may take
# n is number of args that f takes
import itertools

def sum_of_f_over_K_n(f,K,n):
    K_to_the_n = [K for i in xrange(n)]
    return sum(map(lambda(x):f(*x),itertools.product(*K_to_the_n)))

some_list = [0,1] # where your variables come from
def sample_func(a,b,c,d,e):
    return a or b or c or d or e
sum_of_f_over_K_n(sample_func, some_list, 5) == 2**5 -1
于 2012-11-15T07:23:55.177 回答