如何在Python中找出两个字符串的差异字符及对应索引?
使用difflib对比字符串差异并获取索引
直接用difflib.SequenceMatcher就能实现需求,它可以帮你找出两个序列的匹配块和差异部分,以下是完整代码:
import difflib a = 'abcde' b = 'ab34e' # 初始化序列匹配器,None表示不忽略任何字符 matcher = difflib.SequenceMatcher(None, a, b) a_diff = [] # 存储a中差异字符的(索引, 字符) b_diff = [] # 存储b中差异字符的(索引, 字符) # 遍历所有操作码 for tag, i1, i2, j1, j2 in matcher.get_opcodes(): if tag == 'delete': # 处理a中存在、b中缺失的字符 for idx in range(i1, i2): a_diff.append((idx, a[idx])) elif tag == 'insert': # 处理b中存在、a中缺失的字符 for idx in range(j1, j2): b_diff.append((idx, b[idx])) # 输出结果 print("字符串a的差异字符及索引:") for idx, char in a_diff: print(f"索引 {idx}: {char}") print("\n字符串b的差异字符及索引:") for idx, char in b_diff: print(f"索引 {idx}: {char}")
代码说明
SequenceMatcher.get_opcodes()返回的每个元组代表一种操作:delete:a中从i1到i2的子串在b中没有对应内容insert:b中从j1到j2的子串在a中没有对应内容equal:两段子串完全匹配,无需处理replace:a的子串被替换为b的子串,本质是delete+insert,上面的逻辑已覆盖这种情况
运行后输出:
字符串a的差异字符及索引: 索引 2: c 索引 3: d 字符串b的差异字符及索引: 索引 2: 3 索引 3: 4
内容的提问来源于stack exchange,提问作者Perseus_Lynx
相关产品推荐
相关产品推荐

