You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于不等长预期/实际列表创建更新新列表的逻辑修正

问题分析与解决方案

你的核心需求是:对比固定的Expected列表与存在拼写错误、额外元素的Actual列表,将拼写错误的元素替换为Expected中的正确词汇,额外元素标记为missing。当前代码的问题在于仅保留Actual中的元素(即使拼写错误),未实现错误词汇的替换逻辑。

原代码的不足

  1. 当Actual元素存在拼写错误时,仅通过位置对应元素的单词交集判断,直接保留错误拼写,未替换为Expected中的正确词汇;
  2. 依赖位置匹配的逻辑不够灵活,无法处理非对应位置的近似匹配场景。

解决方案一:基于编辑距离的精准匹配

使用编辑距离(Levenshtein Distance)衡量字符串相似度,自动替换拼写错误的词汇,标记无法匹配的额外元素。需要先安装python-Levenshtein库:pip install python-Levenshtein

from Levenshtein import distance as lev_distance

# 固定的Expected列表
exp = ['change of form','death certificate','authority form',
'payment form','lodgement form','supporting documentation',
'proof of authority','proof of executor','proof of identity',
'reverse form','statutory declaration','agreements',
'transfers','mediators'] 

# 待处理的Actual列表
act = ['change of form','death certificatey',
'authority form','payment form','lodgement form','supporting documentation',
'proof of authority','proof of executor','proof of identity','proof of ownership',
'reverse form','statutory declaration','agreements','transfers','mediators']

exp_set = set(exp)
expected_output = []

for item in act:
    # 优先处理完全匹配的元素
    if item in exp_set:
        expected_output.append(item)
        continue
    
    # 查找编辑距离最小的Expected元素(阈值可根据需求调整)
    min_dist = float('inf')
    best_match = None
    for exp_item in exp:
        dist = lev_distance(item, exp_item)
        if dist < min_dist:
            min_dist = dist
            best_match = exp_item
    
    # 编辑距离小于等于3时,判定为拼写错误,替换为正确词汇;否则标记为missing
    if min_dist <= 3:
        expected_output.append(best_match)
    else:
        expected_output.append('missing')

print(expected_output)

解决方案二:基于单词重叠率的匹配(无第三方库)

如果不想依赖第三方库,可通过计算单词集合的重叠率来识别拼写错误的元素,实现替换逻辑:

exp = ['change of form','death certificate','authority form',
'payment form','lodgement form','supporting documentation',
'proof of authority','proof of executor','proof of identity',
'reverse form','statutory declaration','agreements',
'transfers','mediators'] 

act = ['change of form','death certificatey',
'authority form','payment form','lodgement form','supporting documentation',
'proof of authority','proof of executor','proof of identity','proof of ownership',
'reverse form','statutory declaration','agreements','transfers','mediators']

exp_set = set(exp)
# 预存每个Expected元素的单词集合,提升匹配效率
exp_word_sets = {item: set(item.split()) for item in exp}

expected_output = []

for item in act:
    if item in exp_set:
        expected_output.append(item)
        continue
    
    item_words = set(item.split())
    max_overlap = 0
    best_match = None
    for exp_item, exp_words in exp_word_sets.items():
        overlap_count = len(item_words & exp_words)
        # 设定重叠率阈值(这里取50%),超过则判定为近似匹配
        if overlap_count > max_overlap and overlap_count >= len(exp_words) * 0.5:
            max_overlap = overlap_count
            best_match = exp_item
    
    if best_match:
        expected_output.append(best_match)
    else:
        expected_output.append('missing')

print(expected_output)

两种方案均会输出你期望的结果:

['change of form','death certificate',
'authority form','payment form','lodgement form','supporting documentation',
'proof of authority','proof of executor','proof of identity','missing',
'reverse form','statutory declaration','agreements','transfers','mediators']

内容的提问来源于stack exchange,提问作者KoustubhK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 22:30:38