对列表之间的函数求和

Summing over functions between lists

在Python工作。

取k和n个正整数。

我有一个函数 F,它输入一个正整数列表 L,其中 len(L) = k,max(L) < n+1。 F returns 一个整数。

我想 return sum([F(L) for L 一个正整数列表,其中 len(L) = k, max(L)

天真的方法是让 k 嵌套 for 循环。

value = 0
for jj1 in range(1,n+1):
   for jj2 in range(1,n+1): 
     ...
        for jjk in range(1,n+1)
           value = value + F([jj1,jj2,...,jjk])
return value

这并不令人满意,因为我想在各种 k 值(因此有时 k = 1,有时 k = 10)的循环中求和。

我希望有一些标准技巧可以做到这一点?

你想要itertools.product.

>>> from itertools import product
>>> n, k = 4, 3
>>> list(product(range(1, n+1), repeat=k))
[(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 1), (1, 3, 2), (1, 3, 3), (1, 3, 4), (1, 4, 1), (1, 4, 2), (1, 4, 3), (1, 4, 4), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 1, 4), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 1), (2, 3, 2), (2, 3, 3), (2, 3, 4), (2, 4, 1), (2, 4, 2), (2, 4, 3), (2, 4, 4), (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 1, 4), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 2, 4), (3, 3, 1), (3, 3, 2), (3, 3, 3), (3, 3, 4), (3, 4, 1), (3, 4, 2), (3, 4, 3), (3, 4, 4), (4, 1, 1), (4, 1, 2), (4, 1, 3), (4, 1, 4), (4, 2, 1), (4, 2, 2), (4, 2, 3), (4, 2, 4), (4, 3, 1), (4, 3, 2), (4, 3, 3), (4, 3, 4), (4, 4, 1), (4, 4, 2), (4, 4, 3), (4, 4, 4)]

给定 Fnk,因此您可以:

sum(F(list(L)) for L in product(range(1, n+1), repeat=k))

(如果 L 可以作为元组而不是列表,则停止 list 调用)