如何检查元素的值或其值邻居(在设定的范围内)是否存在列表



我有一个数据变量,包含许多[x,y]坐标:

data = ([100,200],[250,110],[50,400]...)

当我收到一个新的[x,y]时,我将其附加到数据:

data.append ([x_cor, y_cor])

但是

我需要过滤";邻居";坐标(以避免附加它们(;范围">

例如,如果我将范围设置为2,那么我需要过滤所有坐标,其中x或y坐标相同,或小于或大于1或2的舍入值,例如:

101200

100199

248111

50400

等等…

当范围只有1时,我可以通过添加所有变量来使用IF和布尔值,比如:

cord_exist = False 
if ([x_cor + 1, y_cor + 1]) in data: cord_exist = True
if ([x_cor - 1, y_cor - 1]) in data: cord_exist = True
if ([x_cor + 1, y_cor]) in data: cord_exist = True
if ([x_cor, y_cor + 1]) in data: cord_exist = True
if ([x_cor - 1, y_cor]) in data: cord_exist = True
if ([x_cor, y_cor - 1]) in data: cord_exist = True
if ([x_cor + 1, y_cor - 1]) in data: cord_exist = True
if ([x_cor - 1, y_cor + 1]) in data: cord_exist = True
if cord_exist == False: data.append ([x_cor, y_cor])

如果范围为2,3或更大,则无法保持

如何以可以自由设置范围的方式解决此问题?

你可以试试这个:

data = [[100,200],[250,110],[50,400]]
new = [103, 403]
margin = 2
if all(abs(d[0] - new[0]) > margin or abs(d[1] - new[1]) > margin for d in data):
data.append(new)

您可以使用range获取所有"邻居"x坐标和类似的所有"邻居’y坐标,并使用itertools.product将它们组合为所有邻居point坐标。然后,您检查与邻居匹配的数据中的任何现有点

示例代码:

from itertools import product
x_margin, y_margin = 2, 3
x_range = range(x_cor-x_margin, x_cor+x_margin+1)
y_range = range(y_cor-y_margin, y_cor+y_margin+1)
neighbours = set(product(x_range, y_range))
cord_exist = any(cor in neighbours for cor in data)

最新更新