在2d数组中查找有效的邻居索引

时间:2015-04-28 06:58:49

标签: python

我在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)]。我知道如何用丑陋的if语句来做这件事。我的问题是,是否有一个漂亮的Pythonic魔术衬里呢?

2 个答案:

答案 0 :(得分:3)

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 :(得分:1)

您当前的代码有多丑?我无法想出任何明显的方法来自动执行此操作,只需手动完成,而不是尝试编写花哨的一个衬垫我不认为它看起来太糟糕了:

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

输出:

git remote add upstream <address of the repository you cloned from>