我是python的初学者,并制作2D随机漫步程序。(向上和向下,向左和向右)。我希望步行者不要去他们去过的地方。
所以,我制作了一些数组,一个是收集坐标历史的数组。 我还定义了一个函数,它返回特定位置的可能选项。似乎功能没有
def opt(histo,cur):
tmp=[]
tmp.append([cur[0]+1,cur[1]])
tmp.append([cur[0]-1,cur[1]])
tmp.append([cur[0],cur[1]+1])
tmp.append([cur[0],cur[1]-1])
tmp.remove(histo[-2])
print "current history : ",histo
print "current tmp : ",tmp
print "current pos : ",cur
for i in tmp:
if i in histo:
print str(i)+" was detected!!"
tmp.remove(i)
return tmp
代码导致
...
当前历史:[[0,0],[0,-1],[0,-2],[ - 1,-2],[ - 1,-1],[ - 2,-1] ,[-2,0],[ - 3],[ - 3,-1],[ - 3, - 2],[ - 3,-3],[ - 3,-3],[ - - ] ,-3],[ - 6,-3],[ - 7,-3],[ - 7,-2],[ - 6, - 2],[ - 5, - 2],[ - , - , - 1],[ - 4,-1],[ - 4, - 2]]
当前tmp:[[ - 3,-2],[ - 5, - 2],[ - 4,-3]]
当前pos:[ - 4,-2]
检测到[p> [ - 3,-2] !! 检测到[p> [ - 4,-3] !!消除后:[[ - 5,-2]]
...
为什么[-5,-2]在这种情况下是安全的?
答案 0 :(得分:0)
可能的最小变化如下:
def opt(histo,cur):
tmp=[]
tmp.append([cur[0]+1,cur[1]])
tmp.append([cur[0]-1,cur[1]])
tmp.append([cur[0],cur[1]+1])
tmp.append([cur[0],cur[1]-1])
tmp.remove(histo[-2])
print "current history : ",histo
print "current tmp : ",tmp
print "current pos : ",cur
for i in list(tmp):
if i in histo:
print str(i)+" was detected!!"
tmp.remove(i)
return tmp
也就是说,它会将tmp
更改为list(tmp)
。这样,您就不会迭代您正在修改的列表的同一副本。
也就是说,in
在列表上使用时效率很低,出于性能和正确性原因,元组应该用于内部数据结构。因此,您还应将所有引用的[cur[0]+1, cur[1]]
更改为(cur[0]+1, cur[1])
,并将histo
的类型修改为一组。