Respostas:
Você pode usar rfind()
ou links do 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
A diferença é que quando a substring não é encontrada, rfind()
retorna -1
enquanto rindex()
gera uma exceção ValueError
(link do Python2:) ValueError
.
Se você não deseja verificar o rfind()
código de retorno -1
, pode preferir rindex()
que forneça uma mensagem de erro compreensível. Caso contrário, você pode procurar por minutos em que o valor inesperado -1
vem do seu código ...
>>> txt = '''first line
... second line
... third line'''
>>> txt.rfind('\n')
22
>>> txt.rindex('\n')
22
A more_itertools
biblioteca oferece ferramentas para encontrar índices de todos os caracteres ou todas as substrings .
Dado
import more_itertools as mit
s = "hello"
pred = lambda x: x == "l"
Código
Personagens
Agora existe a rlocate
ferramenta disponível:
next(mit.rlocate(s, pred))
# 3
Uma ferramenta complementar é locate
:
list(mit.locate(s, pred))[-1]
# 3
mit.last(mit.locate(s, pred))
# 3
Substrings
Há também um window_size
parâmetro disponível para localizar o item principal de vários itens:
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
Não estou tentando ressuscitar uma postagem inativa, mas como ela ainda não foi publicada ...
(Foi assim que fiz antes de encontrar esta pergunta)
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
Explicação: Ao pesquisar a última ocorrência, na verdade você está pesquisando a primeira ocorrência na sequência invertida. Sabendo disso, fiz s[::-1]
(que retorna uma string invertida) e depois indexei o target
de lá. Então eu fiz, len(s) - 1 - the index found
porque queremos que o índice seja revertido (ou seja, original).
Cuidado, porém! Se target
houver mais de um caractere, você provavelmente não o encontrará na string invertida. Para corrigir isso, use last_pos = len(s) - 1 - s[::-1].index(target[::-1])
, que procura uma versão invertida de target
.
você pode usar rindex()
function para obter a última ocorrência de um caractere na string
s="hellloooloo"
b='l'
print(s.rindex(b))
Método rindex () da cadeia de caracteres Python
Descrição O
método de string Python rindex () retorna o último índice em que a substring str é encontrada ou gera uma exceção se esse índice não existir, restringindo opcionalmente a pesquisa à string [beg: end].
Sintaxe A
seguir, é apresentada a sintaxe do método rindex () -
str.rindex(str, beg=0 end=len(string))
Parâmetros
str - especifica a sequência a ser pesquisada.
beg - Este é o índice inicial, por padrão é 0
len - Este é o índice final, por padrão é igual ao comprimento da string.
Valor de retorno
Este método retorna o último índice, se encontrado, gera uma exceção se str não for encontrado.
Exemplo
O exemplo a seguir mostra o uso do método rindex ().
Demonstração ao vivo
str1 = "this is string example....wow!!!";
str2 = "is";
print str1.rindex(str2)
print str1.index(str2)
Quando executamos o programa acima, ele produz o seguinte resultado -
5
2
str
como nome de variável. Outro nome de variável que as pessoas devem evitar em python éabc
; há um módulo chamadoabc
na API nativa.