Почему rfind и find возвращают одинаковые значения в Python 2.6.5?
Я относительно новичок в 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 ответов
Я думаю, вы ожидаете rfind
чтобы вернуть индекс самого правого символа в первом / самом левом совпадении для "what"
. Он фактически возвращает индекс самого левого символа в последнем/правой матч "what
". Цитата документация:
str.rfind(sub[, start[, end]])
возвращает самый высокий индекс в строке, где substring sub нашел, такой, что sub содержится в
s[start:end]
. Необязательные аргументы старт и конец интерпретируются как в нотации среза. Возвращение-1
на провал.
"ab c ab".find("ab")
будет 0
, потому что самое левое вхождение находится на левом конце."ab c ab".rfind("ab")
будет 5
, потому что самое правое вхождение начинается с этого индекса.
чтобы лучше понять, что такое .rfind
предназначен для, попробуйте свой пример со строкой типа " Привет, что случилось, привет, что случилось "(то есть более 1 появления "что")
найти() вернет индекс первого матча. Но!--2-->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