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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:45:31