Odpowiedzi:
Można użyć rfind()
albo python2 linki: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
Różnica polega na tym, że nie można znaleźć podciągu, rfind()
zwraca -1
podczas zgłaszania rindex()
wyjątku ValueError
(łącze Python2:) ValueError
.
Jeśli nie chcesz sprawdzać rfind()
kodu powrotu -1
, możesz preferować rindex()
dostarczenie zrozumiałego komunikatu o błędzie. W przeciwnym razie możesz wyszukać minuty, w których nieoczekiwana wartość -1
pochodzi z Twojego kodu ...
>>> txt = '''first line
... second line
... third line'''
>>> txt.rfind('\n')
22
>>> txt.rindex('\n')
22
Do more_itertools
oferty biblioteki narzędzia do znajdowania indeksów wszystkich znaków lub wszystkich podciągów .
Dany
import more_itertools as mit
s = "hello"
pred = lambda x: x == "l"
Kod
Postacie
Teraz dostępne jest rlocate
narzędzie:
next(mit.rlocate(s, pred))
# 3
Uzupełniającym narzędziem jest locate
:
list(mit.locate(s, pred))[-1]
# 3
mit.last(mit.locate(s, pred))
# 3
Podciągi
Dostępny jest również window_size
parametr umożliwiający zlokalizowanie wiodącego elementu kilku przedmiotów:
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
Nie próbuję wskrzesić nieaktywnego posta, ale ponieważ nie został on jeszcze opublikowany ...
(Tak to zrobiłem przed znalezieniem tego pytania)
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
Objaśnienie: Gdy szukasz ostatniego wystąpienia, tak naprawdę szukasz pierwszego wystąpienia w odwróconym ciągu. Wiedząc o tym, zrobiłem s[::-1]
(co zwraca odwrócony ciąg), a następnie zindeksowałem target
stamtąd. Potem zrobiłem, len(s) - 1 - the index found
ponieważ chcemy indeks w nieodwróconym (tj. Oryginalnym) ciągu.
Uważaj jednak! Jeśli target
jest więcej niż jeden znak, prawdopodobnie nie znajdziesz go w odwróconym ciągu. Aby to naprawić, użyj last_pos = len(s) - 1 - s[::-1].index(target[::-1])
, który szuka odwróconej wersji target
.
Jeśli nie chcesz używać rfind, to załatwi sprawę /
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
możesz użyć rindex()
funkcji, aby uzyskać ostatnie wystąpienie znaku w ciągu
s="hellloooloo"
b='l'
print(s.rindex(b))
Metoda rindex () w języku Python String
Opis
Metoda ciągu znaków w Pythonie rindex () zwraca ostatni indeks, w którym znaleziono ciąg podłańcucha, lub zgłasza wyjątek, jeśli taki indeks nie istnieje, opcjonalnie ograniczając wyszukiwanie do łańcucha [beg: end].
Składnia
Poniżej znajduje się składnia metody rindex () -
str.rindex(str, beg=0 end=len(string))
Parametry
str - określa ciąg do przeszukania.
beg - jest to indeks początkowy, domyślnie jego wartość 0
len - jest to indeks kończący, domyślnie jest równy długości łańcucha.
Zwracana wartość
Ta metoda zwraca ostatni indeks, jeśli zostanie znaleziony, w przeciwnym razie generuje wyjątek, jeśli nie zostanie znaleziony str.
Przykład
Poniższy przykład ilustruje użycie metody rindex ().
Demo na żywo
str1 = "this is string example....wow!!!";
str2 = "is";
print str1.rindex(str2)
print str1.index(str2)
Gdy uruchomimy program powyżej, generuje następujący wynik -
5
2
str
jako nazwy zmiennej. Inną nazwą zmiennej, której ludzie powinni unikać w pythonie, jestabc
;abc
w natywnym API jest moduł o nazwie