对于两个给定的字符串,是否有一种pythonic方法来计算两个字符串(从字符串的位置0开始)连续多少个相同字符?
例如,在aaa_Hello
和aa_World
中,“前导匹配字符”为aa
,长度为2。在another
和example
中有没有前导匹配字符,长度为0。
我已经编写了一个函数来实现这一点,该函数使用了for循环,因此对我来说似乎非常不切实际:
def matchlen(string0, string1): # Note: does not work if a string is ''
for counter in range(min(len(string0), len(string1))):
# run until there is a mismatch between the characters in the strings
if string0[counter] != string1[counter]:
# in this case the function terminates
return(counter)
return(counter+1)
matchlen(string0='aaa_Hello', string1='aa_World') # returns 2
matchlen(string0='another', string1='example') # returns 0
答案 0 :(得分:2)
您可以使用zip
和enumerate
:
def matchlen(str1, str2):
i = -1 # needed if you don't enter the loop (an empty string)
for i, (char1, char2) in enumerate(zip(str1, str2)):
if char1 != char2:
return i
return i+1
答案 1 :(得分:1)
from itertools import takewhile
common_prefix_length = sum(
1 for _ in takewhile(lambda x: x[0]==x[1], zip(string0, string1)))
zip
将配对两个字符串中的字母;只要它们相等,takewhile
就会产生它们;和sum
将看到有多少。
正如泡泡所言,这确实与您的loop回事完全一样。它唯一的优点(也是唯一的缺点)是它是单线的。随你便吧。