我在Python中有一個2d列表。給定索引我想找到該索引的所有鄰居。所以如果我的名單是3x3
然後給予索引(1, 1)
我想返回[(0, 1), (1, 0), (2, 1), (1, 2), (2, 2), (0, 0), (0, 2), (2, 0)]
但如果索引是(0, 0)
那麼我只想返回[(0, 1), (1,0), (1, 1)]
。我知道如何用醜陋的陳述來做到這一點。我的問題是,這有一個漂亮的Pythonic魔術襯墊嗎?在二維數組中找到有效的鄰居索引
2
A
回答
2
3x3空間的恆定時間解決方案,例如列表解析:
valid={(x,y) for x in range(3) for y in range (3)}
dirs=[(dx,dy) for dx in (-1,0,1) for dy in (-1,0,1) if (dx,dy)!=(0,0)]
def voisins(x,y): return [(x+dx,y+dy) for (dx,dy) in dirs if (x+dx,y+dy) in valid]
1
你目前的代碼有多醜?我想不出任何明顯的方式來自動地做到這一點,只是做手工,但不嘗試寫看上一眼襯裏,我不認爲它看起來太糟糕了:
def find_neighours(index, x_size, y_size):
neighbours = []
x1, y1, = index
for x_move in (-1, 0, 1):
for y_move in (-1, 0, 1):
if x_move == 0 and y_move == 0:
continue
x2, y2 = x1 + x_move, y1 + y_move
if x2 < 0 or x2 >= x_size:
continue
if y2 < 0 or y2 >= y_size:
continue
neighbours.append((x2, y2))
return neighbours
輸出:
find_neighours((1, 1), 3, 3)
Out[2]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1), (2, 2)]
find_neighours((0, 0), 3, 3)
Out[3]: [(0, 1), (1, 0), (1, 1)]
相關問題
- 1. 在二維數組中找到有效的鄰居
- 2. 有效索引numpy數組鄰居
- 3. 在二維數組中找到唯一的相鄰索引
- 4. 查找節點鄰居二維數組
- 5. 連鄰居二維數組
- 6. 在二維數組中找到一個鄰居
- 7. 使用convolve2d查找二維數組中的鄰居數量
- 8. 在二維數組中尋找8個鄰居
- 9. 尋找二維數組中的最小鄰居
- 10. 在MATLAB中查找N維數組中的所有鄰居
- 11. 如何在多維數組中找到鄰居?
- 12. python,在一個二維列表中找到鄰居
- 13. 檢查二維數組中的相鄰索引
- 14. 索引二維數組由索引的二維數組沒有循環
- 15. 高效找到切割鄰居並返回索引
- 16. 檢查二維數組中連接的鄰居的算法
- 17. 二維4x4陣列中的鄰居
- 18. Python索引二維數組
- 19. 查找n維鄰居
- 20. 將一維數組索引轉換爲二維數組索引
- 21. 如何從二維數組中找到索引
- 22. 在Perl中查找二維數組的索引值
- 23. java中二維數組的索引
- 24. matlab中二維數組的索引
- 25. python中的二維數組索引值
- 26. 索引NumPy的二維數組與另一二維數組
- 27. 查找二維數組中的最大數字索引
- 28. Java-在二維數組中尋找索引
- 29. 在二維數組Java中查找按鈕索引?
- 30. 兩組高維點:在另一組中找到最近的鄰居
是的這正是我目前正在做的。我希望有像導入鄰居:) –
我想你可能已經有類似的東西,希望它可以作爲一個體面的基線,讓其他人改善。 – Marius