Pythonでこれを行うにはどうすればよいですか?
first string = GOOD MORNING
second string = GOOD BYE
5 文字以降は一致しません
C では、次のように実行できます。
length = strspn(str1,str2);
Pythonでこれを行うにはどうすればよいですか?
first string = GOOD MORNING
second string = GOOD BYE
5 文字以降は一致しません
C では、次のように実行できます。
length = strspn(str1,str2);
多様性のために
from itertools import takewhile, izip
sum(1 for x in takewhile(lambda x: x[0] == x[1],
izip(iter('GOOD MORNING'), iter('GOOD BYE'))))
5
def strspn(s1, s2):
m = min(len(s1), len(s1))
mismatches = (i for i, (c1, c2)
in enumerate(zip(s1[:m], s2[:m])) if c1 != c2)
return next(mismatches, m)
def matcher(A, B):
for i in range(min(len(A), len(B))):
if A[i] != B[i]:
return i
return min(len(A), len(B))
print str(matcher("GOOD MORNING", "GOOD BYE")) + " characters match"
def strspn(A, B):
for i in range(len(A)):
if A[i] not in B:
return i
return len(A)
print "129th has " + str(strspn("129th", "0123456789")) + " digits"
出力
5 characters match
129th has 3 digits
2 つの方法:
first = 'GOOD MORNING'
second = 'GOOD BYE'
import difflib
sq = difflib.SequenceMatcher(None,first,second)
m = min(len(first),len(second))
print sq.find_longest_match(0,m,0,m)[2]
print '-----------'
print (i for i in xrange(min(len(first),len(second)))
if first[i]!=second[i]).next()
結果
5
-----------
5
Pythonにそのための組み込み関数があるかどうかはわかりませんが、単純に自分の関数を書くことができます
first = 'GOOD MORNING'
second = 'GOOD BYE'
len1 = len(first)
len2 = len(second)
count = 0
for i in range(len1):
if i < len2 and first[i] == second[i]:
count += 1
continue
else:
break
return count