Мое предложение:
from itertools import product
from operator import mul
from functools import reduce
n = 3
powers = zip(*((i, i**2, i**3) for i in range(1, n+1)))
s = sum(reduce(mul, p) for p in product(*powers))
, и вы можете даже обобщить powers
для функции:
def powers(n, exponents):
return [[i**e for i in range(1, n+1)] for e in exponents]
powers(n=3, exponents=[2, 1, 3]))
# [[1, 4, 9], [1, 2, 3], [1, 8, 27]]
Объяснение:
с использованием product
с опцией repeat
сумма может быть записана как:
from itertools import product
n = 3
s = sum(j**2 * i * k**3 for i, j, k in product(range(1, n+1), repeat=3)))
print(s)
, это может быть легко обобщено для большего количества переменных.
, если эффективность является проблемойВы можете предварительно рассчитать полномочия и затем суммировать их:
powers = list(zip(*((i, i**2, i**3) for i in range(1, n+1))))
# [(1, 2, 3), (1, 4, 9), (1, 8, 27)]
s = sum(p0 * p1 * p2 for p0, p1, p2 in product(*powers))
или, для краткости записи, если у вас гораздо больше переменных, вы можете использовать functools.reduce
:
from operator import mul
from functools import reduce
s = sum(reduce(mul, p) for p in product(*powers))