国际象棋运动,内存耗尽python循环

国际象棋运动,内存耗尽python循环,python,loops,chess,Python,Loops,Chess,我的任务是计算一个骑士在(0,0)开始时可以占据的所有潜在位置。我是一个初学者,所以我的代码很笨重,但它似乎适用于较小的迭代集。当我走到8-9步深时,我的内存就用完了 def moves(pos): re=[[]] for i in range(0,len(pos)): x,y=pos[i] a=[x+2,y+1] b=[x+2,y-1] c=[x-2,y+1] d=[x-2,y-1]

我的任务是计算一个骑士在(0,0)开始时可以占据的所有潜在位置。我是一个初学者,所以我的代码很笨重,但它似乎适用于较小的迭代集。当我走到8-9步深时,我的内存就用完了

def moves(pos):
    re=[[]]
    for i in range(0,len(pos)):
        x,y=pos[i]
        a=[x+2,y+1]
        b=[x+2,y-1]
        c=[x-2,y+1]
        d=[x-2,y-1]
        e=[x+1,y+2]
        f=[x+1,y-2]
        g=[x-1,y+2]
        h=[x-1,y-2]
        re.append(a)
        re.append(b)
        re.append(c)
        re.append(d)
        re.append(e)
        re.append(f)
        re.append(g)
        re.append(h)
    del re[0]
    return re
def clean(a):
    cmoves=[]
    for i in range(0,len(a)):
        if a[i][0]>-1 and a[i][1]>-1 and a[i][0]<9 and a[i][1]<9 :
            cmoves.append(a[i])
    return cmoves 
def comb(a):
   return clean(moves(a))
pos= [[0,0]]  
a=comb(res)
steps_count=10
for step in range(steps_count):
    res=comb(res)  
def移动(位置):
re=[]]
对于范围(0,len(pos))内的i:
x、 y=位置[i]
a=[x+2,y+1]
b=[x+2,y-1]
c=[x-2,y+1]
d=[x-2,y-1]
e=[x+1,y+2]
f=[x+1,y-2]
g=[x-1,y+2]
h=[x-1,y-2]
关于附加(a)
关于附加(b)
关于追加(c)
关于追加(d)
关于追加(e)
关于附加(f)
关于附加(g)
关于附加(h)
德尔雷[0]
返回re
def清洁(a):
cmoves=[]
对于范围(0,len(a))中的i:

如果a[i][0]>-1和a[i][1]>-1以及a[i][0]位于
清理
中,也删除重复的位置。如果将坐标转换为使用
tuple
s而不是
list
s,则可以使用
set
来跟踪您以前看到的位置。

clean
中,还可以删除重复的位置。如果将坐标转换为使用
tuple
s而不是
list
s,您可以使用
set
来跟踪您以前看到的位置。

好的,如果我想计算平均距离之类的东西,我需要知道哪些位置出现的频率。所以,如果我删除重复,我会失去我认为的信息?@ HMMMBOB,你可以用A代替你的位置。然后,@ HMMMBOB,考虑两个位置,一个起始方块A和一个附近目的地B。你重复添加B(从A可访问),并重复添加(从B可访问)。很难看出这有什么用处。指定起始平方距离0及其附近的八个平方距离1。然后,在不改变已记录距离的情况下,将更大的距离指定给其他方块。那么你应该有从原点到大量可到达正方形的“最短路径距离”。好了,如果我想计算平均距离,我需要知道哪些位置出现的频率。所以,如果我删除重复,我会失去我认为的信息?@ HMMMBOB,你可以用A代替你的位置。然后,@ HMMMBOB,考虑两个位置,一个起始方块A和一个附近目的地B。你重复添加B(从A可访问),并重复添加(从B可访问)。很难看出这有什么用处。指定起始平方距离0及其附近的八个平方距离1。然后,在不改变已记录距离的情况下,将更大的距离指定给其他方块。然后,你将拥有从原点到大量可到达正方形的“最短路径距离”。