сравнение строк в Python

def find_last(search, target):
    for index, character in reversed(list(enumerate(search))):
        if character in target:
            return index
        else:
            return -1

предположим, что search = "aaaaa" и target = "aa", вывод должен = 3, а не 4. Я пытаюсь получить последнюю позицию, в которой сравниваются две строки


person Spencer Josephs    schedule 07.04.2015    source источник


Ответы (1)


В настоящее время вы сравниваете каждый символ из строки search в обратном порядке и проверяете, находится ли он в target. Если это так, вы преждевременно вернете неверный индекс.

Вместо этого я бы рекомендовал использовать метод str.rfind. :

>>> 'aaaaa'.rfind('aa')
3

str.rfind - это в основном то же самое, что и метод str.index, за исключением того, что он ищет первую иголку справа от стога сена.

Изменить: чтобы обрабатывать пустые иглы как находящиеся в крайнем правом индексе, можно использовать следующее выражение возврата:

def find_last(search, target):
        return target and search.rfind(target) or len(search)
person Shashank    schedule 07.04.2015
comment
но если у меня есть строка 22222222 и target =, вывод должен быть 9, а не -1. но rfind не учитывает этот сценарий - person Spencer Josephs; 07.04.2015
comment
@SpencerJosephs А, понятно. Я отредактировал ответ, чтобы он возвращал длину строки поиска, если целью является пустая строка. - person Shashank; 07.04.2015