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

Python : defining function that returns summation of all permutations

我有一个 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),它可以为 i,j,k,l.

的所有排列提供 a(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 都不会存储在内存中。