我有两个列表(长度可能相同也可能不同),每个列表中都有一系列由两个点组成的元组(基本上是X,Y值)。
我正在将这两个列表相互比较,以找到具有相似点值的两个点。我尝试了列表推导技术,但由于列表中嵌套的元组太多,我很难理解并且无法使其正常工作。
这是做这件事情的最佳(最快)方法吗?我觉得可能有更符合Python风格的方法。
假设我有两个列表:
这将导致matchedPairs看起来像这样,其中包含点元组的元组:
我正在将这两个列表相互比较,以找到具有相似点值的两个点。我尝试了列表推导技术,但由于列表中嵌套的元组太多,我很难理解并且无法使其正常工作。
这是做这件事情的最佳(最快)方法吗?我觉得可能有更符合Python风格的方法。
假设我有两个列表:
pointPairA = [(2,1), (4,8)]
pointPairB = [(3,2), (10,2), (4,2)]
然后创建一个空列表用于存储键值对,以及一个容差值来仅存储匹配的键值对。
matchedPairs = []
tolerance = 2
然后这个循环会解包元组,比较它们的不同,并将它们添加到matchedPairs列表中以指示匹配。
for pointPairA in pointPairListA:
for pointPairB in pointPairListB:
## Assign the current X,Y values for each pair
pointPairA_x, pointPairA_y = pointPairA
pointPairB_x, pointPairB_x = pointPairB
## Get the difference of each set of points
xDiff = abs(pointPairA_x - pointPairB_x)
yDiff = abs(pointPairA1_y - pointPairB_y)
if xDiff < tolerance and yDiff < tolerance:
matchedPairs.append((pointPairA, pointPairB))
这将导致matchedPairs看起来像这样,其中包含点元组的元组:
[( (2,1), (3,2) ), ( (2,1), (4,2) )]
[2+1j, 4+8j]
。然后,您可以将abs(pt1-pt2)
与公差进行比较。 - John La Rooy