Fonction rfind()

Résolu/Fermé
yumeasoko8572 Messages postés 18 Date d'inscription mardi 22 novembre 2022 Statut Membre Dernière intervention 5 janvier 2023 - Modifié le 25 nov. 2022 à 02:47
 PierrotLeFou - 26 nov. 2022 à 01:49

Bonjour, tout le monde 

Je suis en train d'apprendre la fonction rfind(), rindex() Bonsoir, j'ai bien compris que la fonction rfind ou rindex nous permet de trouver le caractère à partir de la droite. 

 Le problème est comme montré dans l'exemple ci-dessous, en mettant rfind ou rindex, python continue de compter à partir de la gauche. Il n'y a qu'une seul fois le mot amis, est ce que c'est pour ça ? 

print("les amis bonjour".rindex("amis")) # Retourne 4

Lorsque je rajoute ce mot à la fin, il me compte bien celui du début en partant de la fin. 

J'espère être précis dans mes propos 

En attendant, merci d'avance pour vos réponses. :) 

Modération : merci de partager le code comme expliqué ici.

4 réponses

mamiemando Messages postés 33385 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 novembre 2024 7 803
25 nov. 2022 à 03:01

Bonjour,

Merci de partager le code comme expliqué ici.

Pour préciser ce que dit Pierrot, rfind ou rindex ne change pas la manière dont est indexée la chaîne. Cela change simplement le sens de la recherche (on part de la fin, on remonte vers le début de la chaîne et on s'arrête à la première occurrence trouvée). Cela veut dire que si ta chaîne contient plusieurs fois le mot "amis", la fonction s'arrêtera sur la l'occurrence la plus à droite (d'où le nom rfind).

Quoi qu'il en soit, l'index est toujours compté en partant du premier caractère, car c'est la seule indexation avec laquelle raisonne les chaînes en python (et la seule dont tu devrais avoir besoin d'ailleurs). Cet index sera celui du caractère le plus à gauche de la chaîne cherchée (car c'est là quelle débute).

s = "....abc....abc....."
t = "abc"
i = s.rfind(t)         # 11, car le "abc" de droite débute à l'index 11
j = i + len(t)         # 14, car le "abc" de droite se termine juste avant l'index 14
print(s, i, j, s[i:j]) # Le "abc" de droite correspond à s[11:14]
print(len(s) - j)      # 5, car il reste 5 points après le "abc" de droite

Bonne chance

1

Essaies avec la chaîne  "abcbd"  avec index, rindex, find, rfind avec 'b' et 'z' ...
Il trouve le bon indice, mais il commence à chercher à partir de la fin au lieu du début.

Pour avoir ce que tu veux, on peut faire:

len(chaine)-1-chaine.index(...)

0
yumeasoko8572 Messages postés 18 Date d'inscription mardi 22 novembre 2022 Statut Membre Dernière intervention 5 janvier 2023
25 nov. 2022 à 21:00

Merci pour vos réponses, je pense bien comprendre la fonction .rfind mais il est vrai que dans mon exemple lorsque le terminal me retourne 4 pour trouver "amis", il agit comme la fonction .find si je comprend bien avec rfind il devrait me retourner 11 (le mot "amis" commence à la onzième lettre à partir de la fin) 

0

Il ne faut justement pas penser de cette façon. Tu commences à chercher "amis" à partir de la fin, mais ce mot commence bien à la position 4.
Si tu avais deux fois le mot "amis" dans ta phrase, avec rfind, tu retrouverais la "première" position de la "dernière" occurence.

Le tout toujours à partir du début.

0