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 に答える