Respuestas:
Puede usar rfind()
o enlaces de 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
La diferencia es cuando no se encuentra la subcadena, rfind()
regresa -1
mientras se rindex()
genera una excepción ValueError
(enlace Python2:) ValueError
.
Si no desea verificar el rfind()
código de retorno -1
, puede preferir rindex()
que le proporcione un mensaje de error comprensible. De lo contrario, puede buscar minutos de donde -1
proviene el valor inesperado dentro de su código ...
>>> txt = '''first line
... second line
... third line'''
>>> txt.rfind('\n')
22
>>> txt.rindex('\n')
22
La more_itertools
biblioteca ofrece herramientas para encontrar índices de todos los caracteres o todas las subcadenas .
Dado
import more_itertools as mit
s = "hello"
pred = lambda x: x == "l"
Código
Caracteres
Ahora hay una rlocate
herramienta disponible:
next(mit.rlocate(s, pred))
# 3
Una herramienta complementaria es locate
:
list(mit.locate(s, pred))[-1]
# 3
mit.last(mit.locate(s, pred))
# 3
Subcadenas
También hay un window_size
parámetro disponible para localizar el elemento principal de varios elementos:
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
No intento resucitar una publicación inactiva, pero como aún no se ha publicado ...
(Así es como lo hice antes de encontrar esta pregunta)
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
Explicación: cuando busca la última aparición, realmente busca la primera aparición en la cadena invertida. Sabiendo esto, lo hice s[::-1]
(que devuelve una cadena invertida), y luego indicé target
desde allí. Luego lo hice len(s) - 1 - the index found
porque queremos el índice en la cadena no invertida (es decir, original).
¡Pero cuidado! Si target
hay más de un carácter, probablemente no lo encontrará en la cadena invertida. Para solucionar esto, use last_pos = len(s) - 1 - s[::-1].index(target[::-1])
, que busca una versión inversa de target
.
puede usar la rindex()
función para obtener la última aparición de un carácter en cadena
s="hellloooloo"
b='l'
print(s.rindex(b))
Método de Pydex String rindex ()
Descripción
Método de cadena de Python rindex () devuelve el último índice donde se encuentra la cadena de subcadena, o genera una excepción si no existe dicho índice, opcionalmente restringiendo la búsqueda a la cadena [beg: end].
Sintaxis
Siguiente es la sintaxis para el método rindex () -
str.rindex(str, beg=0 end=len(string))
Parámetros
str: especifica la cadena a buscar.
beg - Este es el índice inicial, por defecto es 0
len - Este es el índice final, por defecto es igual a la longitud de la cadena.
Valor de retorno
Este método devuelve el último índice si se encuentra, de lo contrario genera una excepción si no se encuentra str.
Ejemplo
El siguiente ejemplo muestra el uso del método rindex ().
Demo en vivo
str1 = "this is string example....wow!!!";
str2 = "is";
print str1.rindex(str2)
print str1.index(str2)
Cuando ejecutamos el programa anterior, produce el siguiente resultado:
5
2
str
como nombre de variable. Otro nombre de variable que la gente debería evitar en python esabc
; Hay un módulo llamadoabc
en la API nativa.