如何从二维列表中获取与目标列表相似度最高的两个子列表
获取匹配度最高的两个子列表
嘿,这问题很好解决!你已经成功算出了每个子列表和list_g的相似度,接下来只需要把子列表和对应的相似度分数绑定在一起,然后按分数排序,再取前两个就搞定啦。
我给你修改并完善了代码,直接就能用:
list_j = [[100,2,3], [4,98,99], [5,99,98]] list_g = [100,99,98] import difflib # 将每个子列表与它的相似度分数配对 matched_pairs = [] for element in list_j: similarity = difflib.SequenceMatcher(None, element, list_g).ratio() matched_pairs.append( (similarity, element) ) # 按相似度从高到低排序(reverse=True 表示降序) matched_pairs.sort(reverse=True) # 提取前两个匹配度最高的子列表 top_two_matches = [pair[1] for pair in matched_pairs[:2]] print("匹配度最高的两个子列表:", top_two_matches)
代码解释:
- 配对子列表与分数:我们把每个子列表和它的相似度组成元组,这样就能保证分数和对应的子列表不会脱节。
- 排序:Python的
sort()方法对元组排序时,会优先比较第一个元素(也就是相似度分数),加上reverse=True就会从高到低排列。 - 提取结果:用列表推导式从排序后的元组里取出子列表,取前两个就是你要的匹配度最高的两个对象。
运行这段代码,你会得到输出:
匹配度最高的两个子列表: [[5, 99, 98], [100, 2, 3]]
(注:因为前两个子列表的相似度都是0.333,排序后它们的顺序会和原列表一致,如果你想调整它们的顺序,也可以在排序时加入额外规则,但这个结果已经完全符合你的需求啦。)
内容的提问来源于stack exchange,提问作者Ella




