如何基于元组次元素最小绝对差配对两个质心元组列表?
质心坐标配对实现方案
给定两个包含质心坐标元组的列表:
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), (1096, 837)), ...]的结果列表,要求用列表推导式实现,且不能使用zip(因为两个列表元素无对应关系,长度可能不同)。
实现代码
result = [ (current, min(prior_centroids, key=lambda p: abs(current[1] - p[1]))) for current in current_centroids ]
代码说明
- 外层是遍历
current_centroids的列表推导式,逐个取出每个current元组 - 对每个
current,用min()函数从prior_centroids中筛选符合条件的元组:key=lambda p: abs(current[1] - p[1])指定比较规则:计算current第二个元素与prior元组第二个元素的绝对差,取差值最小的元组
- 最终每个
current元组和对应的最优prior元组组成二元组,形成结果列表
验证示例
比如current_centroids中的(924, 849),计算其第二个元素849与prior_centroids所有元组第二个元素的绝对差:
- 837 → 12,763 → 86,960 → 111,694 → 155,720 → 129,75 → 774,713 → 136
最小差值为12,对应prior_centroids中的(1096, 837),与需求示例一致。
内容的提问来源于stack exchange,提问作者Jared
相关产品推荐
相关产品推荐

