Python:定义返回所有排列求和的函数

时间:2015-02-24 13:34:48

标签: python itertools

我有一个python函数a(i,j,k,l)。对于0<i<1000<j<1000<k<1000<l<100,我使用此函数获得单个值。

例如。 a(1,4,5,3) = 5

现在我想要的是一个函数b(i,j,k,l),它可以为a(i,j,k,l)的所有排列提供i,j,k,l的总和。

例如b(1,4,5,3) = a(1,4,5,3) + a(1,4,3,5) + a(1,5,4,3) + a(1,5,3,4) + .....。 (因为它是一种排列,所以会有4!=24个这样的术语。

我看到itertools.permutations但我不知道如何使用它来获取索引。任何优雅的方式?

1 个答案:

答案 0 :(得分:3)

您可以使用itertools.permutations然后解压缩值,例如

sum(a(*perm) for perm in permutations((j, j, k, l)))

例如,

>>> from itertools import permutations
>>> from random import randint
>>> def a(*args):
...    return args[randint(0, len(args) - 1)]
>>> sum(a(*perm) for perm in permutations((1, 2, 3, 4)))
57

我们将生成器表达式传递给sum,这意味着所有计算出的permutations都没有存储在内存中。