Найти индекс последнего вхождения подстроки в строке
Я хочу найти позицию (или индекс) последнего вхождения определенной подстроки в заданной строке str.
Например, предполагая, что входная строка равна str = 'hello', а подстрока target = 'l', то в результате должно возвращаться значение 3.
Как я могу это сделать?
5 ответ(ов)
Метод str.rindex используется для поиска последнего вхождения подстроки в строке. В отличие от str.index, который возвращает индекс первого вхождения, rindex возвращает индекс последнего вхождения подстроки.
Пример использования:
>>> 'hello'.rindex('l')
3
В этом примере rindex найден индекс последнего 'l', который находится на позиции 3 (индексация начинается с 0).
Для сравнения, можно использовать метод str.index, который возвращает индекс первого вхождения подстроки:
>>> 'hello'.index('l')
2
Здесь index возвращает индекс первого 'l', находящегося на позиции 2.
Учтите, что если подстрока не найдена, rindex вызовет исключение ValueError, поэтому обратите на это внимание при использовании этого метода.
Не пытаюсь воскресить неактивный пост, но так как это еще не было опубликовано...
Вот как я это сделал до того, как нашел этот вопрос:
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
Объяснение: Когда вы ищете последнее вхождение, на самом деле вы ищете первое вхождение в перевернутой строке. Зная это, я использовал s[::-1] (которая возвращает перевернутую строку), а затем нашел индекс target в ней. После этого я вычислил len(s) - 1 - найденный индекс, поскольку нам нужен индекс в оригинальной строке.
Однако будьте осторожны! Если target состоит более чем из одного символа, вы, вероятно, не найдете его в перевернутой строке. Чтобы исправить это, используйте last_pos = len(s) - 1 - s[::-1].index(target[::-1]), который ищет перевернутую версию target.
Попробуйте следующий код:
s = 'hello plombier pantin'
print(s.find('p')) # Вывод: 6
print(s.index('p')) # Вывод: 6
print(s.rindex('p')) # Вывод: 15
print(s.rfind('p')) # Вывод: 15
Объяснение:
s.find('p')возвращает первый индекс, где встречается 'p' (в данном случае 6).s.index('p')также возвращает первый индекс 'p', но вызывает исключение, если символ не найден.s.rindex('p')возвращает последний индекс 'p' и также вызывает исключение, если символ не найден.s.rfind('p')возвращает последний индекс 'p', возвращая -1, если символ не найден.
Таким образом, find() и rfind() безопасны для использования, если вы не уверены, что символ присутствует в строке.
В этом случае можно использовать как метод rfind(), так и метод rindex() для строк. Оба метода вернут максимальный индекс подстроки в строке, как показано ниже:
test_string = 'hello'
target = 'l'
print(test_string.rfind(target)) # Вывод: 3
print(test_string.rindex(target)) # Вывод: 3
Однако стоит помнить, что метод rindex() вызывает исключение ValueError (с сообщением "подстрока не найдена"), если целевое значение не найдено в строке. В то время как метод rfind() просто вернет -1 в таком случае.
Перевод вашего кода на русский язык в стиле ответа на StackOverflow будет выглядеть следующим образом:
# Последнее вхождение символа в строке без использования встроенных функций
str = input("Введите строку: ")
char = input("Введите символ для поиска в строке: ")
flag = -1 # Используем -1, чтобы легче было проверить, найден ли символ
for i in range(len(str)):
if str[i] == char:
flag = i # Обновляем индекс, если символ найден
if flag == -1:
print("Введённый символ '", char, "' не найден в строке.")
else:
print("Символ '", char, "' последний раз встречается на индексе: ", flag)
В этом коде мы проходим по каждому символу в строке и сохраняем последний индекс, где встречается искомый символ. Если символ не найден, программа сообщает об этом. В этом случае использован флаг со значением -1 для более удобной проверки, найден ли символ.
Есть ли в Python метод подстроки 'contains' для строк?
Как перевернуть строку в Python?
Вывод строки в текстовый файл
Как заполнить строку в Python пробелами?
Диапазон букв в Python