Найти индекс последнего вхождения подстроки в строке
Я хочу найти позицию (или индекс) последнего вхождения определенной подстроки в заданной строке 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' для строк?
Объединение двух столбцов текста в DataFrame pandas
Вывод строки в текстовый файл
Преобразование всех строк в списке в целые числа
Как извлечь числа из строки в Python?