比较列表中的元组元素

问题描述 投票:0回答:1

我有两个包含质心坐标元组的列表...

current_centroids = [(924, 849), (734, 974), (360, 778), (400, 710), (963, 1067), (839, 440), (899, 88)]
prior_centroids = [(1096, 837), (522, 763), (898, 960), (563, 694), (1790, 720), (1080, 75), (1780, 713)]

我想通过将

current_centroids
中每个元组的第二个元素与
prior_centroids
中每个元组的第二个元素进行比较来生成配对元组,并找到第二个元素之间绝对差最小的结果对。

例如,对于

(924, 849)
中的
current_centroids
,在比较第二个元素时,来自
prior_centroids
的绝对差值最小(=12)的元组是
(1096, 837)
。我一直在尝试使用列表理解来解决这个问题,以便我可以生成格式为
[((924, 849), (1096, 837)), .....]
的最终列表。我没有使用
zip
,因为每个列表中的元素不会对应,并且它们可以具有不同数量的元素,即使在我的示例中它们的大小相同。

python list tuples list-comprehension
1个回答
0
投票

循环

current_centroids
。对于每个元素,使用
min()
查找
prior_centroids
[1]
值之间绝对差最小的元素。

result = []
for c1 in current_centroids:
    c2 = min(prior_centroids, key=lambda c: abs(c1[1] - c[1]))
    result.append((c1, c2))

示例输入的结果:

[((924, 849), (1096, 837)),
 ((734, 974), (898, 960)),
 ((360, 778), (522, 763)),
 ((400, 710), (1780, 713)),
 ((963, 1067), (898, 960)),
 ((839, 440), (563, 694)),
 ((899, 88), (1080, 75))]
© www.soinside.com 2019 - 2024. All rights reserved.