我有一个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,但是我不知道如何使用它来获取索引。有什么优雅的方法吗?

最佳答案

您可以使用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都不会存储在内存中。

10-08 11:08