length - ¿Cómo obtener la posición de un personaje en Python?
python string substring (8)
¿Qué sucede cuando la cadena contiene un carácter duplicado? De mi experiencia con el index()
vi que por duplicado recuperas el mismo índice.
Por ejemplo:
s = ''abccde''
for c in s:
print(''%s, %d'' % (c, s.index(c)))
volvería:
a, 0
b, 1
c, 2
c, 2
d, 4
En ese caso puedes hacer algo así:
for i, character in enumerate(my_string):
# i is the position of the character in the string
¿Cómo puedo obtener la posición de un personaje dentro de una cadena en python?
Solo para completar, en el caso de que quiera encontrar la extensión en un nombre de archivo para verificarla, necesito encontrar el último ''.'', En este caso use rfind:
path = ''toto.titi.tata..xls''
path.find(''.'')
4
path.rfind(''.'')
15
En mi caso, utilizo lo siguiente, que funciona cualquiera que sea el nombre completo del archivo:
filename_without_extension = complete_name[:complete_name.rfind(''.'')]
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]
el cual regresará [4, 9]
Un carácter puede aparecer varias veces en una cadena. Por ejemplo, en una sentence
cadena, la posición de e
es 1, 4, 7
(porque la indexación generalmente comienza desde cero). pero lo que encuentro es que tanto las funciones find()
como index()
devuelven la primera posición de un personaje. Por lo tanto, esto se puede resolver haciendo esto:
def charposition(string, char):
pos = [] #list to store positions for each ''char'' in ''string''
for n in range(len(string)):
if string[n] == char:
pos.append(n)
return pos
s = "sentence"
print(charposition(s, ''e''))
#Output: [1, 4, 7]
more_itertools.locate
es una herramienta de terceros que encuentra todos los indicios de elementos que satisfacen una condición.
Aquí encontramos todas las ubicaciones de índice de la letra "i"
.
import more_itertools as mit
s = "supercalifragilisticexpialidocious"
list(mit.locate(s, lambda x: x == "i"))
# [8, 13, 15, 18, 23, 26, 30]
Hay dos métodos de cadena para esto, find()
e index()
. La diferencia entre los dos es lo que sucede cuando no se encuentra la cadena de búsqueda. find()
devuelve -1
e index()
eleva ValueError
.
Usando find()
>>> myString = ''Position of a character''
>>> myString.find(''s'')
2
>>> myString.find(''x'')
-1
Utilizando 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
Del manual de Python.
string.find(s, sub[, start[, end]])
Devuelva el índice más bajo en s, donde se encuentra la subcadena sub , de manera que sub está completamente contenido ens[start:end]
. Devuelve-1
en caso de fallo. Los valores predeterminados para el inicio y el final y la interpretación de los valores negativos son los mismos que para los segmentos.
Y:
string.index(s, sub[, start[, end]])
Comofind()
peroValueError
cuando no se encuentra la subcadena.
>>> s="mystring"
>>> s.index("r")
4
>>> s.find("r")
4
Camino "largo aliento"
>>> for i,c in enumerate(s):
... if "r"==c: print i
...
4
para obtener subcadena,
>>> s="mystring"
>>> s[4:10]
''ring''
string.find(character)
string.index(character)
Tal vez le gustaría echar un vistazo a la documentación para averiguar cuál es la diferencia entre los dos.