python:SequenceMatcher 的示例

本文展示了Python的SequenceMatcher如何用于比较两个字符串,忽略空格。它计算相似度比例并提供匹配的元素块。SequenceMatcher的get_matching_blocks()方法返回匹配部分,而get_opcodes()显示转换第一个序列到第二个序列所需的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python:SequenceMatcher 的示例


以下示例比较两个字符串,并将空格视为“垃圾”:

>>>
s = SequenceMatcher(lambda x: x == " ",
                    "private Thread currentThread;",
                    "private volatile Thread currentThread;")

ratio() 返回一个 [0, 1] 范围内的整数作为两个序列相似性的度量。 根据经验,ratio() 值超过 0.6 就意味着两个序列是近似匹配的:

>>>
print(round(s.ratio(), 3))
0.866

如果你只对两个序列相匹配的位置感兴趣,则 get_matching_blocks() 就很方便:

>>>
for block in s.get_matching_blocks():
    print("a[%d] and b[%d] match for %d elements" % block)
a[0] and b[0] match for 8 elements
a[8] and b[17] match for 21 elements
a[29] and b[38] match for 0 elements

请注意 get_matching_blocks() 返回的最后一个元组总是只用于占位的 (len(a), len(b), 0),这也是元组末尾元素(匹配的元素数量)为 0 的唯一情况。

如果你想要知道如何将第一个序列转成第二个序列,可以使用 get_opcodes():

>>>
for opcode in s.get_opcodes():
    print("%6s a[%d:%d] b[%d:%d]" % opcode)
 equal a[0:8] b[0:8]
insert a[8:8] b[8:17]
 equal a[8:29] b[17:38]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FuncPlotCalc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值