Есть ли питонический способ подсчета количества ведущих совпадающих символов в двух строках? - PullRequest
0 голосов
/ 14 июня 2019

Для двух заданных строк есть ли питонный способ подсчитать, сколько последовательных символов в обеих строках (начиная с позиции 0 строк) совпадают?

Например, в aaa_Hello и aa_World«ведущие совпадающие символы» - это aa, имеющие длину 2. В another и example отсутствуют ведущие совпадающие символы, которые бы имели длину 0.


Iнаписал функцию для достижения этой цели, которая использует цикл 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

Ответы [ 2 ]

2 голосов
/ 14 июня 2019

Вы можете использовать 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 голос
/ 14 июня 2019
from itertools import takewhile
common_prefix_length = sum(
    1 for _ in takewhile(lambda x: x[0]==x[1], zip(string0, string1)))

zip объединит буквы из двух строк;takewhile даст их, пока они равны;и sum увидит, сколько их.

Как говорит пузырёк, это действительно делает то же самое, что и ваша глупость.Его единственный плюс (а также единственный минус) в том, что он однострочный.Возьми как хочешь.

...