¿Cómo puedo obtener la posición de un personaje dentro de una cadena en Python?
Hay dos métodos de cadena para esto, find()
y index()
. La diferencia entre los dos es lo que sucede cuando no se encuentra la cadena de búsqueda. find()
vuelve -1
y index()
subeValueError
.
find()
>>> myString = 'Position of a character'
>>> myString.find('s')
2
>>> myString.find('x')
-1
index()
>>> myString = 'Position of a character'
>>> myString.index('s')
2
>>> myString.index('x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
string.find(s, sub[, start[, end]])
Devuelve el índice más bajo en s donde se encuentra la subcadena sub, de modo que sub está totalmente contenida ens[start:end]
. Retorno-1
al fracaso. Los valores predeterminados para el inicio y el final y la interpretación de los valores negativos son los mismos que para los sectores.
Y:
string.index(s, sub[, start[, end]])
Me gustafind()
pero aumentaValueError
cuando no se encuentra la subcadena.
Solo por razones de integridad, si necesita encontrar todas las posiciones de un personaje en una cadena, puede hacer lo siguiente:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
que volverá [4, 9]
print( [pos for pos, char in enumerate(s) if char == c])
foo = ( [pos for pos, char in enumerate(s) if char == c])
pondrá las coordenadas foo en un formato de lista. Me parece muy útilCamino "largo aliento"
para obtener la subcadena,
fuente
str[from:to]
dóndefrom
y cuálesto
son los índicesSolo para completar, en el caso de que quiera encontrar la extensión en un nombre de archivo para verificarlo, necesito encontrar el último '.', En este caso, use rfind:
en mi caso, uso lo siguiente, que funciona sea cual sea el nombre completo del archivo:
fuente
left = q.find("{"); right = q.rfind("}")
.¿Qué sucede cuando la cadena contiene un carácter duplicado? Desde mi experiencia con
index()
Vi que por duplicado obtienes el mismo índice.Por ejemplo:
volvería:
En ese caso puedes hacer algo así:
fuente
enumerate
es mejor para ese tipo de cosas.Quizás le gustaría echar un vistazo a la documentación para saber cuál es la diferencia entre los dos.
fuente
Un personaje puede aparecer varias veces en una cadena. Por ejemplo, en una cadena
sentence
, la posición dee
es1, 4, 7
(porque la indexación generalmente comienza desde cero). pero lo que encuentro son ambas funcionesfind()
yindex()
devuelve la primera posición de un personaje. Entonces, esto se puede resolver haciendo esto:fuente
more_itertools.locate
es una herramienta de terceros que encuentra todas las indicaciones de elementos que satisfacen una condición.Aquí encontramos todas las ubicaciones de índice de la letra
"i"
.fuente
Una solución con numpy para un acceso rápido a todos los índices:
fuente