Ответы:
Вы можете использовать rfind()
или ссылки Python2:rindex()
rfind()
rindex()
>>> s = 'Hello StackOverflow Hi everybody'
>>> print( s.rfind('H') )
20
>>> print( s.rindex('H') )
20
>>> print( s.rfind('other') )
-1
>>> print( s.rindex('other') )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
Разница в том, что когда подстрока не найдена, rfind()
возвращается, в -1
то время rindex()
как ValueError
выдает исключение (ссылка Python2:) ValueError
.
Если вы не хотите проверять rfind()
код возврата -1
, вы можете предпочесть rindex()
понятное сообщение об ошибке. В противном случае вы можете искать минуты, когда неожиданное значение -1
приходит из вашего кода ...
>>> txt = '''first line
... second line
... third line'''
>>> txt.rfind('\n')
22
>>> txt.rindex('\n')
22
В more_itertools
библиотеке также предлагает инструменты для нахождения индексов всех символов или всех подстрок .
Дано
import more_itertools as mit
s = "hello"
pred = lambda x: x == "l"
Код
Персонажи
Теперь rlocate
доступен инструмент:
next(mit.rlocate(s, pred))
# 3
Дополнительный инструмент locate
:
list(mit.locate(s, pred))[-1]
# 3
mit.last(mit.locate(s, pred))
# 3
Подстроки
Существует также window_size
параметр, позволяющий найти ведущий элемент из нескольких элементов:
s = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
substring = "chuck"
pred = lambda *args: args == tuple(substring)
next(mit.rlocate(s, pred=pred, window_size=len(substring)))
# 59
Не пытается воскресить неактивное сообщение, но так как оно еще не было опубликовано ...
(Вот как я это сделал, прежде чем нашел этот вопрос)
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
Объяснение: Когда вы ищете последнее вхождение, на самом деле вы ищете первое вхождение в обратной строке. Зная это, я сделал s[::-1]
(что возвращает перевернутую строку), а затем проиндексировал target
оттуда. Тогда я сделал, len(s) - 1 - the index found
потому что мы хотим, чтобы индекс в необратимой (то есть оригинальной) строке.
Берегись, хотя! Если target
это более одного символа, вы, вероятно, не найдете его в обратной строке. Чтобы исправить это, используйте last_pos = len(s) - 1 - s[::-1].index(target[::-1])
, который ищет обратную версию target
.
Вы можете использовать rindex()
функцию, чтобы получить последнее вхождение символа в строке
s="hellloooloo"
b='l'
print(s.rindex(b))
Метод Python String rindex ()
Описание
Метод строки Python rindex () возвращает последний индекс, в котором найдена подстрока str, или вызывает исключение, если такого индекса нет, опционально ограничивая поиск строкой [beg: end].
Синтаксис
Следующий синтаксис для метода rindex () -
str.rindex(str, beg=0 end=len(string))
Параметры
str - указывает строку для поиска.
beg - это начальный индекс, по умолчанию его 0
len - это конечный индекс, по умолчанию он равен длине строки.
Возвращаемое значение
Этот метод возвращает последний индекс, если он найден, в противном случае возникает исключение, если str не найден.
Пример
В следующем примере показано использование метода rindex ().
Live Demo
str1 = "this is string example....wow!!!";
str2 = "is";
print str1.rindex(str2)
print str1.index(str2)
Когда мы запускаем вышеуказанную программу, она выдает следующий результат -
5
2
str
в качестве имени переменной. Другое имя переменной, которого люди должны избегать в python, этоabc
;abc
в нативном API есть модуль