我有一个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
但我不知道如何使用它来获取索引。任何优雅的方式?
答案 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
都没有存储在内存中。