我正在寻找创建以下列表的最快,最“pythonic”的方法。
假设我们有一个坐标网格,表示为元组列表。当选择其中任何一个时,我们希望获得所有附近坐标的列表,就好像它们位于以我们选择的坐标为中心的框内。
例如,如果它是100x100网格,我们选择(50,50),则列表应以(40,40)开头,以(60,60)结尾,其中包含之间的所有坐标框。
我可以使用pygame碰撞检测来做到这一点,但我正在使用的网格非常大,因此查找成本太高,直接访问坐标是一个更好的解决方案。
答案 0 :(得分:0)
def lookup(x, y, l):
for xx in xrange(x-l, x+l+1):
for yy in xrange(y-l, y+l+1):
yield (xx, yy)
list(lookup(50, 50, 10))
答案 1 :(得分:0)
这可以在一行中完成,如果L不是太大,使用列表不是问题 - 注意x是中间的x坐标,y是中间的y,L是盒子长度的一半,grid是你的元组数组:
myBox = grid[x - L:x + L][y - L:x + L]
如果你希望L成为框的全长,你可以将x和y设置为较低的边界,然后你得到
myBox = grid[x:x + L][y:y + L]