我正在尝试按顺序匹配两个字符串,直到第一个不匹配的字符,然后确定完全匹配的百分比。我的代码是这样的:
def match(a, b):
a, b = list(a), list(b)
count = 0
for i in range(len(a)):
if (a[i]!= b[i]): break
else: count = count + 1
return count/len(a)
a = '354575368987943'
b = '354535368987000'
c = '354575368987000'
print(match(a,b)) # return 0.267
print(match(a,c)) # return 0.8
python中是否有任何内置方法可以更快地完成它?为简单起见,假设两个字符串长度相同。
答案 0 :(得分:6)
没有内置功能可以执行整个操作,但您可以使用内置功能来计算公共前缀:
import os
def match(a, b):
common = os.path.commonprefix([a, b])
return float(len(common))/len(a)
答案 1 :(得分:4)
我认为没有这种内置方法。
但是你可以改进你的实施:
list(...)
中。字符串是可索引的。count
变量,i
已经具有相同的含义。当您知道结果时,您可以立即返回。像这样,将一些doctests添加为奖励:
def match(a, b):
"""
>>> match('354575368987943', '354535368987000')
0.26666666666666666
>>> match('354575368987943', '354575368987000')
0.8
>>> match('354575368987943', '354575368987943')
1
"""
for i in range(len(a)):
if a[i] != b[i]:
return i / len(a)
return 1
答案 2 :(得分:0)
(刚才在我编辑帖子的时候看到我下面的答案想到了同样的事情)
def match(l1, l2):
# find mismatch
try:
stop = next(i for i, (el1, el2) in enumerate(zip(l1, l2)) if el1 != el2)
return stop/len(l1)
except StopIteration:
return 1