Pythonic方式生成此列表

时间:2013-04-27 20:11:21

标签: python list coordinates

我正在寻找创建以下列表的最快,最“pythonic”的方法。

假设我们有一个坐标网格,表示为元组列表。当选择其中任何一个时,我们希望获得所有附近坐标的列表,就好像它们位于以我们选择的坐标为中心的框内。

例如,如果它是100x100网格,我们选择(50,50),则列表应以(40,40)开头,以(60,60)结尾,其中包含之间的所有坐标框。

我可以使用pygame碰撞检测来做到这一点,但我正在使用的网格非常大,因此查找成本太高,直接访问坐标是一个更好的解决方案。

2 个答案:

答案 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]