2013-04-27 50 views
-2

我正在尋找最快,最'pythonic'的方式來創建以下列表。Pythonic方式生成此列表

假設我們有一個表示爲元組列表的座標網格。當選擇它們中的任何一個時,我們希望得到所有附近座標的列表,就好像它們在以我們選擇的座標爲中心的框內。例如,如果它是一個100x100的網格,並且我們選擇(50,50),則該列表應該以(40,40)開始並以(60,60)結尾,包含所有在它們之間的座標一個盒子。

我可以做到這一點使用pygame的碰撞檢測,但我的工作網格是非常大的,因此查找成本太高,並且直接訪問的座標是一個更好的解決方案。

+5

你到目前爲止已經嘗試解決這個問題?你能包括一些代碼嗎? – 2013-04-27 20:20:47

回答

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)) 
0

這可以在一個行中進行,並使用該列表如果L不是太大也不是問題 - 請注意,x是中間的x座標,y是中間Y,L是半盒子的長度,並且電網是你的元組的數組:

myBox = grid[x - L:x + L][y - L:x + L] 

相反,如果你想L達到盒子的全長,可以設置X和Y是下限,你會得到

myBox = grid[x:x + L][y:y + L] 
相關問題