3 回答

TA貢獻2036條經驗 獲得超8個贊
遞歸確實是一條出路
這個想法是:
如果您假設您的函數適用于 d-1 維,那么您可以獲取該結果并將(循環變量)的值附加到每個結果i,并對 的每個值重復執行此操作i。
基本情況是 d=0 時,在這種情況下,您只有一個空結果。
下面是如何編碼:
def Positions(L, d):
if d == 0: # base case
return [[]]
return [
[i] + res # prepend i to the results coming from recursion
for i in range(L)
for res in Positions(L, d-1)
]
如果您不熟悉最終語句中使用的列表理解語法,那么如果沒有該語法,您將如何執行此操作:
def Positions(L, d):
if d == 0: # base case
return [[]]
positions = []
for i in range(L):
for res in Positions(L, d-1):
positions.append([i] + res)
return positions

TA貢獻1835條經驗 獲得超7個贊
一種簡單的方法是使用itertools
笛卡爾積:
from itertools import product L, D = 2, 2 print(list(product(list(range(L)), repeat = D)))
結果
[(0, 0), (0, 1), (1, 0), (1, 1)]

TA貢獻1827條經驗 獲得超9個贊
你使用遞歸。第一部分是基本情況,第二部分是為較低維度的格子中的每一項添加從 0 到 L-1 的每個數字
def positions(L,d):
if d==0:
return [()]
else:
return [(x,)+positions(L,d-1)[y] for x in range(L) for y in range(len(positions(L,d-1)))]
添加回答
舉報