Comment puis-je obtenir la position d'un caractère à l'intérieur d'une chaîne en python?
Il existe deux méthodes de chaîne pour cela, find()
et index()
. La différence entre les deux est ce qui se passe lorsque la chaîne de recherche n'est pas trouvée. find()
revient -1
et index()
relance ValueError
.
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]])
Renvoie l'indice le plus bas de s où la sous-chaîne sub se trouve telle que sub est entièrement contenu danss[start:end]
. Retour-1
en cas d'échec. Les valeurs par défaut pour le début et la fin et l'interprétation des valeurs négatives sont les mêmes que pour les tranches.
Et:
string.index(s, sub[, start[, end]])
Commefind()
mais soulèveValueError
quand la sous-chaîne n'est pas trouvée.
Dans un souci d'exhaustivité, si vous avez besoin de trouver toutes les positions d'un caractère dans une chaîne, vous pouvez effectuer les opérations suivantes:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
qui reviendra [4, 9]
print( [pos for pos, char in enumerate(s) if char == c])
foo = ( [pos for pos, char in enumerate(s) if char == c])
mettra les coordonnées foo dans un format de liste. Je trouve cela vraiment utileChemin "de longue haleine"
pour obtenir une sous-chaîne,
la source
str[from:to]
oùfrom
etto
sont les indicesJuste pour terminer, dans le cas où je veux trouver l'extension dans un nom de fichier afin de le vérifier, je dois trouver le dernier '.', Dans ce cas, utilisez rfind:
dans mon cas, j'utilise ce qui suit, qui fonctionne quel que soit le nom de fichier complet:
la source
left = q.find("{"); right = q.rfind("}")
.Que se passe-t-il lorsque la chaîne contient un caractère en double? d'après mon expérience,
index()
j'ai vu que pour les doublons, vous récupérez le même index.Par exemple:
retournerais:
Dans ce cas, vous pouvez faire quelque chose comme ça:
la source
enumerate
est mieux pour ce genre de chose.Vous aimeriez peut-être jeter un œil à la documentation pour découvrir quelle est la différence entre les deux.
la source
Un caractère peut apparaître plusieurs fois dans une chaîne. Par exemple, dans une chaîne
sentence
, la position dee
est1, 4, 7
(car l'indexation commence généralement à zéro). mais ce que je trouve est à la fois des fonctionsfind()
etindex()
renvoie la première position d'un caractère. Donc, cela peut être résolu en faisant ceci:la source
more_itertools.locate
est un outil tiers qui trouve tous les indices d'articles qui remplissent une condition.Ici, nous trouvons tous les emplacements d'index de la lettre
"i"
.la source
Une solution avec numpy pour un accès rapide à tous les index:
la source