我在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魔术衬里呢?
答案 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>