在下面的方法中,我组装了一个元组列表,同时试图确保没有一个值小于零。下面的方法首先获取一个块并使用它来计算相邻块的坐标,增量为 1,然后继续删除其坐标小于零的块。我的问题在于第二阶段,因为如果我输入一个坐标为 (0,0) 的块:(0,-1) 和 (-1,0),它不会删除两个坐标。
代码如下:
def get_block_neighbors(self, block):
neighbor_list = []
neighbor_list.append((block.x,block.y+1))
neighbor_list.append((block.x+1,block.y+1))
neighbor_list.append((block.x+1,block.y))
neighbor_list.append((block.x+1,block.y-1))
neighbor_list.append((block.x,block.y-1))
neighbor_list.append((block.x-1,block.y-1))
neighbor_list.append((block.x-1,block.y))
neighbor_list.append((block.x-1,block.y+1))
for item in neighbor_list: #each tuple item in the list
if item[0] < 0 or item[1] < 0:
print item
neighbor_list.remove(item)
print neighbor_list
get_block_neighbors(Block(Point(0,0),"green"))
我得到以下输出:
(1, -1)
(-1, -1)
(-1, 1)
[(0, 1), (1, 1), (1, 0), (0, -1), (-1, 0)]
在这里,前三行是我要删除的元组的打印输出,而最后一行是我组装的元组的列表。如您所见,最后两个元组的至少一个坐标具有负值。理想情况下,我想要这个:
(1, -1)
(-1, -1)
(-1, 1)
(0, -1)
(-1, 0)
[(0, 1), (1, 1), (1, 0)]
奇怪的是,当我删除/注释掉该行时neighbor_list.remove(item)
,从某种意义上说,我离我需要的位置更近了一点,因为它的打印输出中的方法包括我想要删除的两个元组。但当然,这样做的一个缺点是我不再从该列表中删除任何目标元组。
对此的任何帮助将不胜感激,我真的希望我的疏忽不是很明显。顺便说一句,我觉得应该有一种方法来组装这个列表,同时能够放弃删除阶段,这就是我在刚刚解决上面的代码之前开始编写这个方法的方式。谢谢!