2015-04-07 5 views
2
def find_last(search, target): 
    for index, character in reversed(list(enumerate(search))): 
     if character in target: 
      return index 
     else: 
      return -1 

предположим, что поиск = «ааааа» и цель = «аа», выход должен = 3, а не 4. Я пытаюсь получить последнюю позицию, в которой две строки сравнитьсравнивающие строки в Python

ответ

3

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

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

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

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

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

def find_last(search, target): 
     return target and search.rfind(target) or len(search) 
+0

, но если у меня есть строка «22222222», и цель =» ", out put должен быть 9, а не -1. но rfind не учитывает этот сценарий –

+0

@SpencerJosephs А, я вижу. Я отредактировал ответ, чтобы вернуть длину строки поиска, если целью является пустая строка. – Shashank

Смежные вопросы