我有两套清单。list A= [(1,6),(3,10),(4,1),(0,5)]list B = [(0,3),(0,4),(30,1),(4,10)]现在对于 B 中的每个项目,我必须检查它是否在列表 A 中可用,阈值为 -2 到 +2。所以 B 中的第一个值是 (0,3),因为在每个点中使用阈值,我发现(from -2 to 2, from 1 to 5)在这个范围内,列表 A 中是否有一个列表项可用。我们可以看到最后一个项目值(0,5)满足这个条件。所以我可以说该项目(0,3)在列表 A 中。现在我必须将此值放在一个新列表中。根据流程,我的新列表将是:[(0,3),(0,4),(4,10)]如果有人告诉我如何实现这一目标,我会很高兴。
2 回答
MMMHUHU
TA贡献1834条经验 获得超8个赞
您可以使用出租车几何:
def manhattan(as_, b):
threshold = 4
for a in as_:
p1, p2 = a
q1, q2 = b
dist = abs(p1 - q1) + abs(p2 - q2)
if dist <= threshold:
return b
else:
continue
t = list(filter(lambda i: manhattan(listA, i), listB))
[(0, 3), (0, 4), (4, 10)]
或者
from operator import truth
t = list(filter(truth, (manhattan(listA, i) for i in listB)))
缥缈止盈
TA贡献2041条经验 获得超4个赞
这是我认为你正在寻找的
A= [(1,6),(3,10),(4,1),(0,5)]
B = [(0,3),(0,4),(30,1),(4,10)]
result=[x for x in B if any(x[0]-2<=a[0]<=x[0]+2 and x[1]-2<=a[1]<=x[1]+2 for a in A)]
print(result)
输出 :
[(0, 3), (0, 4), (4, 10)]
添加回答
举报
0/150
提交
取消