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)))]
添加回答
举报