我有一个python函数a(i,j,k,l)
。对于0<i<100
,0<j<100
,0<k<100
,0<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
都不会存储在内存中。