在 Python 中作業。
取 k 和 n 個正整數。
我有一個函式 F,輸入一個正整數串列 L,其中 len(L) = k,max(L) < n 1。F 回傳一個整數。
我想回傳 sum([F(L) for L 一個正整數串列,其中 len(L) = k, max(L)<n 1])
天真的方法是讓 k 嵌套 for 回圈。
value = 0
for jj1 in range(1,n 1):
for jj2 in range(1,n 1):
...
for jjk in range(1,n 1)
value = value F([jj1,jj2,...,jjk])
return value
這并不令人滿意,因為我想在一個回圈中對不同的 k 值求和(所以有時 k = 1,有時 k = 10)。
我希望有一些標準的技巧來做到這一點?
uj5u.com熱心網友回復:
你想要itertools.product。
>>> from itertools import product
>>> n, k = 4, 3
>>> list(product(range(1, n 1), repeat=k))
[(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 1), (1, 3, 2), (1, 3, 3), (1, 3, 4), (1, 4, 1), (1, 4, 2), (1, 4, 3), (1, 4, 4), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 1, 4), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 1), (2, 3, 2), (2, 3, 3), (2, 3, 4), (2, 4, 1), (2, 4, 2), (2, 4, 3), (2, 4, 4), (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 1, 4), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 2, 4), (3, 3, 1), (3, 3, 2), (3, 3, 3), (3, 3, 4), (3, 4, 1), (3, 4, 2), (3, 4, 3), (3, 4, 4), (4, 1, 1), (4, 1, 2), (4, 1, 3), (4, 1, 4), (4, 2, 1), (4, 2, 2), (4, 2, 3), (4, 2, 4), (4, 3, 1), (4, 3, 2), (4, 3, 3), (4, 3, 4), (4, 4, 1), (4, 4, 2), (4, 4, 3), (4, 4, 4)]
給定F、n和k,因此您可以執行以下操作:
sum(F(list(L)) for L in product(range(1, n 1), repeat=k))
(或者如果可以成為一個元組而不是一個串列,那么就停止list呼叫)L
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/427728.html
