Знайдіть індекс останнього виникнення підрядка в рядку


349

Я хочу знайти позицію (або індекс) останнього виникнення певної підрядки у заданому рядку введення str.

Наприклад, припустимо, що вхідним рядком є, str = 'hello'а підрядка є target = 'l', тоді він повинен вивести 3.

Як я можу це зробити?

Відповіді:


601

Використання .rfind():

>>> s = 'hello'
>>> s.rfind('l')
3

Також не використовуйте strяк ім'я змінної, інакше ви затінюєте вбудовану str().


7
+1 для підказки, щоб не використовувати strяк ім’я змінної. Ще одна назва змінної, якої люди повинні уникати в python, це abc; є модуль, який викликається abcв рідному API.
прогіаммер

81

Ви можете використовувати посилання Python2rfind() або :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

Привіт @JacobSchneider. Я додав приклад відповідно до вашого коментаря. Я не розумію вашого питання. Будь ласка, надайте більше інформації: версія Python, вміст вашого рядка ... Ура
олибре

39

Використовуйте str.rindexметод.

>>> 'hello'.rindex('l')
3
>>> 'hello'.index('l')
2

5

Спробуйте це:

s = 'hello plombier pantin'
print (s.find('p'))
6
print (s.index('p'))
6
print (s.rindex('p'))
15
print (s.rfind('p'))

3

У 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

2

Не намагається воскресити неактивну публікацію, але оскільки вона ще не була опублікована ...

(Ось як я це зробив, перш ніж знайти це питання)

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.


1
Я відповів на цю відповідь, оскільки, хоч і не надто корисний для початкового питання, він був цікавим та загальноосвітнім. Я думаю, що багато хто з вивчення Python є саме таким.
Білл Еванс у Маріпосі

1

Якщо ви не хочете використовувати rfind, це зробить трюк /

def find_last(s, t):
    last_pos = -1
    while True:
        pos = s.find(t, last_pos + 1)
        if pos == -1:
            return last_pos
        else:
            last_pos = pos

0

ви можете використовувати rindex()функцію для отримання останнього появи символу в рядку

s="hellloooloo"
b='l'
print(s.rindex(b))

0

Метод rindex () струнного пітона ()

Опис
рядового методу Python rindex () повертає останній індекс, де знайдено підрядку str, або збільшує виняток, якщо такого індексу немає, додатково обмежуючи пошук до рядка [beg: end].


Наступний синтаксис - це синтаксис методу rindex () -

str.rindex(str, beg=0 end=len(string))

Параметри
str - Цей параметр визначає рядок, який потрібно шукати.

beg - це початковий індекс, за замовчуванням його 0

len - це закінчення індексу, за замовчуванням його дорівнює довжині рядка.

Повернене значення
Цей метод повертає останній індекс, якщо знайдено інакше, викликає виняток, якщо str не знайдено.

Приклад
У наступному прикладі показано використання методу rindex ().

Демонстраційна демонстрація

! / usr / bin / python

str1 = "this is string example....wow!!!";
str2 = "is";

print str1.rindex(str2)
print str1.index(str2)

Коли ми працюємо над програмою, вона дає такий результат -

5
2

Посилання: Метод rindex () Python String -) - Підручник

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.