我正试图解决这个问题:CodeEval。
问题要求我查看XY坐标中可能的点候选列表。然后,如果它们满足要求,我将它们添加到“已确认”列表中,然后将周围的点添加到“tosearch”列表中。然而,这并不像我期望的那样表现。
示例代码:
Starting point
tosearch=[[0,0]]
for point in tosearch:
if conditions filled:
confirmed.append(point)
#Basically Im trying to add (x,y-1) etc. to the tosearct list
tosearch.append([point[0],point[1]-1]) #1
tosearch.append([point[0]+1,point[1]]) #2
tosearch.append([point[0]-1,point[1]-1])#3
tosearch.append([point[0],point[1]+1]) #4
tosearch.remove(point)
else:
tosearch.remove(point)
这似乎导致总是忽略了一半的追加。因此,在这种情况下,#1和#3被忽略。如果我只留下1和2,那么只会执行2。我不明白......
也许问题出在其他地方所以这里是整个代码: Pastebin
答案 0 :(得分:5)
你在迭代它时修改了这个集合 2个选项:
答案 1 :(得分:0)
问题是你正在修改迭代tosearch
的循环体中的tosearch
。由于tosearch
正在发生变化,因此无法可靠地迭代。
您可能根本不需要迭代。只需使用while
循环:
searched = set() # if you need to keep track of searched items
tosearch = [(0,0)] #use tuples so you can put them in a set
confirmed = []
while tosearch:
point = tosearch.pop()
searched.add(point) # if you need to keep track
if CONDITIONS_MET:
confirmed.append(point)
# tosearch.append() ....