Почему rfind и find возвращают одинаковые значения в Python 2.6.5? - PullRequest
8 голосов
/ 13 июля 2011

Я относительно новичок в Python, и что-то идет вверх.По сути, когда я вызываю str.rfind("test") для строки, вывод такой же, как str.find("test").Лучше всего показать пример:

Python 2.6.5 (r265:79063, May  6 2011, 17:25:59) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> line = "hello what's up"
>>> line.rfind("what")
6
>>> line.find("what")
6

Насколько я понимаю, значение line.find в порядке, но значение line.rfind должно быть 9.Я неправильно истолковываю эти функции или плохо их использую?

Ответы [ 3 ]

24 голосов
/ 13 июля 2011

Я думаю, вы ожидаете, что rfind вернет индекс самого правого символа в первом / крайнем левом совпадении для "what". Он на самом деле возвращает индекс самого левого символа в последнем / крайнем правом совпадении для "what ". Цитируя документацию :

str.rfind(sub[, start[, end]])

Возвращает самый высокий индекс в строке, где найдена подстрока sub , так что sub содержится в s[start:end]. Необязательные аргументы start и end интерпретируются как обозначения срезов. Вернуть -1 при ошибке.

"ab c ab".find("ab") будет 0, потому что крайний левый случай находится на левом конце.
"ab c ab".rfind("ab") будет 5, потому что самый правый случай начинается с этого индекса.

2 голосов
/ 21 июня 2016

find () вернет индекс первого совпадения.Но rfind даст вам последнее появление шаблона.Будет ясно, если вы попытаетесь найти повторяющиеся совпадения.

проверьте этот пример
       >>> string='hey! how are you harish'
       >>>string.find('h')
       >>>0                #it matched for first 'h' in the string
       >>> string.rfind('h')    
           22             #it matched for the last 'h' in the string
2 голосов
/ 13 июля 2011

Чтобы лучше понять, для чего предназначен .rfind, попробуйте пример с такой строкой, как «привет, что случилось, привет, что случилось» (то есть, более чем 1 вхождение «что»)

...