Python 查找给定位置的邻居

Python 查找给定位置的邻居,python,list,loops,Python,List,Loops,我有一个元组列表,比如[(4,6),(0,3),(7,9)],它位于一个有8行10列的矩阵中。我想找到元组的相邻位置 例如,我希望: Neighbors (4, 6): (3, 6) (4, 5) (4, 7) (5, 6) Neighbors (0, 3): (0, 2) (0, 4) (1, 3) Neighbors (7, 9): (6, 9) (7, 8) 相邻位置必须在矩阵中 我曾尝试将元组列表转换为列表列表,但我一直坚持创建一个循环来查找这些邻居 l = [(4,6),(0,3),

我有一个元组列表,比如
[(4,6),(0,3),(7,9)]
,它位于一个有8行10列的矩阵中。我想找到元组的相邻位置

例如,我希望:

Neighbors (4, 6): (3, 6) (4, 5) (4, 7) (5, 6)
Neighbors (0, 3): (0, 2) (0, 4) (1, 3)
Neighbors (7, 9): (6, 9) (7, 8)
相邻位置必须在矩阵中

我曾尝试将元组列表转换为列表列表,但我一直坚持创建一个循环来查找这些邻居

l = [(4,6),(0,3),(7,9)]
lst = []
rows = 8
columns = 10
for i in l:
    lst.append(list(i))

将元组转换为列表完全没有必要

编写一个函数以返回单个点的邻域(该函数应循环所有可能的邻域,然后将结果过滤到矩阵边界内的邻域),然后在另一个循环中使用该函数以获取所有点的邻域

>>> from typing import List, Tuple
>>> def neighbors(coords: Tuple[int, int], rows: int, cols: int) -> List[Tuple[int, int]]:
...     y, x = coords
...     return [
...         (y + dy, x + dx)
...         for dy, dx in [(0, 1), (1, 0), (-1, 0), (0, -1)]
...         if y + dy in range(rows) and x + dx in range(cols)
...     ]
...
>>> neighbors((7, 9), 8, 10)
[(6, 9), (7, 8)]
>>> [n for p in [(4, 6), (0, 3), (7, 9)] for n in neighbors(p, 8, 10)]
[(4, 7), (5, 6), (3, 6), (4, 5), (0, 4), (1, 3), (0, 2), (6, 9), (7, 8)]

你可以像列表一样读取元组,那么试试这个

l = [(4,6),(0,3),(7,9)]
lst = []
for i in range(len(l)):
    x = l[i][0]
    y = l[i][1]
    if x - 1 >= 0:
        lst.append((x - 1, y))
    if x + 1 <= 7:
        lst.append((x + 1, y))
    if y - 1 >= 0:
        lst.append((x, y - 1))
    if y + 1 <= 9:
        lst.append((x, y + 1))
l=[(4,6)、(0,3)、(7,9)]
lst=[]
对于范围内的i(len(l)):
x=l[i][0]
y=l[i][1]
如果x-1>=0:
第一个附加((x-1,y))
如果x+1=0:
第一个附加((x,y-1))

如果y+1,请浏览、和,了解本网站的工作原理,并帮助您改进当前和未来的问题,这可以帮助您获得更好的答案。“演示如何解决此编码问题?”与堆栈溢出无关。您必须诚实地尝试解决方案,然后询问有关实现的具体问题。堆栈溢出并不是为了取代现有的教程和文档。首先,查找网格点的邻域是一项涵盖广泛的技术。第二,虽然你自己清楚地知道如何找到邻居,但你并没有尝试编写代码。我们希望您在这里发布之前进行尝试。我认为您应该循环使用
范围(len(l))
,而不是
l
。您的代码抛出
TypeError
谢谢!谢谢你的帮助