-2

我正在寻找最快、最“pythonic”的方式来创建以下列表。

假设我们有一个表示为元组列表的坐标网格。选择其中任何一个时,我们希望获取附近所有坐标的列表,就好像它们在我们选择的坐标上的一个盒子里一样。

例如,如果它是一个 100x100 的网格,并且我们选择 (50,50),则列表应该以 (40,40) 开头并以 (60,60) 结尾,其中包含所有可以组成一个框的坐标。

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

4

2 回答 2

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))
于 2013-04-27T20:52:24.653 回答
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]
于 2013-04-27T21:23:52.797 回答