Tutorial

Comment indexer et couper des chaînes dans Python 3

Published on March 19, 2021
Français
Comment indexer et couper des chaînes dans Python 3

Introduction

Le type de données de chaîne Python est une séquence composée d’un ou de plusieurs caractères individuels et constituée de lettres, de chiffres, de caractères d’espacement ou de symboles. Puisqu’une chaîne est une séquence, vous pouvez y accéder de la même manière que pour les autres types de données basés sur des séquences, via l’indexation et le découpage en tranches.

Ce tutoriel vous montrera de quelle manière accéder aux chaînes via l’indexation, les découper en séquences de caractères et passer en revue certaines méthodes de comptage et de localisation de caractères.

De quelle manière sont indexées les chaînes

Comme les éléments des list data type correspondent à un numéro d’index, chacun des caractères d’une chaîne correspondent également à un numéro d’index, en commençant par le numéro d’index 0.

Pour la chaîne Sammy Shark! la répartition de l’index ressemble à ce qui suit  :

S a m m y S h a r k !
0 1 2 3 4 5 6 7 8 9 10 11

Comme vous pouvez le voir, le premier S commence à l’index 0 et la chaîne se termine à l’index 11 avec le symbole ! .

Nous pouvons également remarquer que le caractère d’espacement entre Sammy et Shark correspond aussi à un numéro d’index qui lui est propre. Dans ce cas, le numéro d’index associé à l’espace est 5.

Le point d’exclamation (!) est également associé à un numéro d’index. Tous les autres symboles ou signes de ponctuation, comme *#$&. ;?, sont aussi considérés comme des caractères et seraient associés à leur propre numéro d’index.

Le fait qu’à chaque caractère d’une chaîne Python correspond un numéro d’index, nous pouvons accéder aux chaînes et les manipuler de la même manière que nous le ferions avec d’autres types de données séquentielles.

Accéder aux caractères avec un numéro d’index positif

En référençant les numéros d’index, nous pouvons isoler l’un des caractères d’une chaîne. Pour cela, nous devons mettre les numéros entre crochets. Déclarons une chaîne, imprimons-la et appelons le numéro d’index entre crochets :

ss = "Sammy Shark!"
print(ss[4])
Output
y

Lorsque nous faisons référence à un numéro d’index particulier d’une chaîne, Python renvoie le caractère qui se trouve dans cette position. Étant donné que la lettre y est au numéro d’index 4 de la chaîne ss = "Sammy Shark!", lorsque nous imprimons ss[4], nous recevons la sortie y comme la sortie.````

Les numéros d’index nous permettent d’accéder à des caractères spécifiques dans une chaîne.

Accéder aux caractères par numéro d’index négatif

Si nous souhaitons localiser un élément vers la fin d’une longue chaîne, nous pouvons également compter à rebours à partir de la fin de la chaîne, en commençant par le numéro d’index -1.

Pour la même chaîne Sammy Shark! la ventilation de l’index négatif ressemble à ce qui suit :

S a m m y S h a r k !
-12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

En utilisant des numéros d’index négatifs, nous pouvons imprimer le caractère r, en nous référant à sa position à l’index -3, comme ceci :

print(ss[-3])
Output
r

L’utilisation de numéros d’index négatifs peut être avantageuse pour isoler un caractère unique qui se trouve vers la fin d’une longue chaîne.

Découper des chaînes

Nous pouvons également appeler une plage de caractères de la chaîne. Disons que nous souhaitons juste imprimer le mot Shark. Nous pouvons le faire en créant une slice, qui est une séquence de caractères dans une chaîne d’origine. Avec les slices, nous pouvons appeler plusieurs valeurs de caractères en créant une plage de numéros d’index séparés par deux points [x:y] :

print(ss[6:11])
Output
Shark

Lorsque vous créez une slice, comme dans [6:11], le premier numéro d’index correspond à l’endroit où la slice commence (inclusive), le second numéro d’index correspond à l’endroit où la slice se termine (exclusive). C’est pour cette raison que dans notre exemple ci-dessus, la plage doit correspondre au numéro d’index qui se trouve juste après la fin de la chaîne.

Lorsque nous découpons des chaînes, nous créons une substring, qui est en réalité une chaîne qui existe dans une autre. Lorsque nous appelons ss[6:11], nous appelons la sous-chaîne Shark qui existe dans la chaîne Sammy Shark!

Si nous souhaitons inclure l’une des extrémités d’une chaîne, nous pouvons omettre l’un des numéros dans la syntaxe suivante : string [n:n]. Par exemple, pour imprimer le premier mot de la chaîne ss - « Sammy » - nous pouvons saisir :

print(ss[:5])
Output
Sammy

Nous avons procédé à cette opération en omettant le numéro d’index avant les deux points dans la syntaxe de slice et en incluant uniquement le numéro d’index qui se trouve après. Ce dernier fait référence à la fin de la sous-chaîne.

Pour imprimer une sous-chaîne qui commence au milieu d’une chaîne et continue jusqu’à à la fin, nous devons inclure uniquement le numéro d’index avant les deux points :

print(ss[7:])
Output
hark!

En incluant uniquement le numéro d’index avant les deux points et en laissant le second numéro d’index hors de la syntaxe, la sous-chaîne ira du caractère qui correspond au numéro d’index appelé à la fin de la chaîne.

Vous pouvez également utiliser des numéros d’index négatifs pour découper une chaîne. Comme nous l’avons vu auparavant, les index négatifs d’une chaîne par commencent par -1. Ensuite, comptez à partir de ce chiffre jusqu’à atteindre le début de la chaîne. Lorsque nous utilisons des numéros d’index négatifs, nous devons tout d’abord commencer par l’endroit où le plus petit chiffre se trouve plus tôt dans la chaîne.

Utilisons deux numéros d’index négatifs pour découper la chaîne ss :

print(ss[-4:-1])
Output
ark

La sous-chaîne « ark » est imprimée à partir de la chaîne « Sammy Shark! » car le caractère « a » se trouve à la position du numéro d’index -4, et le caractère « k » se trouve juste avant la position du numéro d’index -1.

Spécifier une stride lors du découpage des chaînes

En plus des deux numéros d’index, le découpage de chaîne peut accepter un troisième paramètre. Le troisième paramètre spécifie la stride, qui renvoie à la quantité de caractères à passer une fois que le premier caractère est récupéré à partir de la chaîne. Jusqu’à présent, nous avons omis le paramètre stride. Python utilise la stride 1 par défaut afin que chaque caractère entre deux numéros d’index soit bien récupéré.

Examinons à nouveau l’exemple ci-dessus dans lequel la sous-chaîne « Shark » est imprimée :

print(ss[6:11])
Output
Shark

Nous pouvons obtenir les mêmes résultats en incluant un troisième paramètre avec une stride de 1 :

print(ss[6:11:1])
Output
Shark

Ainsi, avec une stride de 1, chaque caractère qui se trouve entre deux numéros d’index d’une slice sera récupéré. Si nous omettons le paramètre stride, Python utilisera la valeur de 1 par défaut.

Si, au lieu de cela, nous augmentons la stride, nous verrons que les caractères sont ignorés :

print(ss[0:12:2])
Output
SmySak

En spécifiant la stride de 2 comme dans le dernier paramètre de la syntaxe ss[0:12:2], Python ignore tout autre caractère. Examinons les caractères imprimés en rouge :

Sammy Shark!

Notez que, si vous spécifiez une stride de 2, le caractère d’espacement de l’index numéro 5 est également ignoré.

Si nous utilisons un numéro plus grand pour notre paramètre stride, la sous-chaîne que nous obtiendrons sera significativement plus petite :

print(ss[0:12:4])
Output
Sya

En utilisant la stride de 4 pour le dernier paramètre de la syntaxe ss[0:12:4], Python imprime uniquement tous les quatre caractères. Encore une fois, examinons les caractères imprimés en rouge :

Sammy Shark!

Dans cet exemple, le caractère d’espacement est également ignoré.

Étant donné que nous imprimons l’ensemble de la chaîne, dans la syntaxe, nous pouvons omettre les deux numéros d’index et conserver les deux points pour obtenir le même résultat :

print(ss[::4])
Output
Sya

En omettant les deux numéros d’index et en conservant les deux points, l’ensemble de la chaîne restera dans la plage. Dans le même temps, en ajoutant un paramètre final pour la stride, vous spécifierez le nombre de caractères à ignorer.

En outre, vous pouvez indiquer une valeur numérique négative pour la stride, que nous pouvons utiliser pour imprimer la chaîne d’origine dans le sens inverse si nous configurons la stride sur -1 :

print(ss[::-1])
Output
!krahS ymmaS

L’utilisation des deux points sans spécifier de paramètre vous permettra d’inclure tous les caractères de la chaîne d’origine. Une stride de 1 inclura chaque caractère sans en sauter aucun et en utilisant une valeur négative pour cette stride, vous inverserez l’ordre des caractères.

Faisons-le à nouveau, mais avec une stride de -2 :

print(ss[::-2])
Output
!rh ma

Dans cet exemple, ss[::-2], nous traitons l’intégralité de la chaîne d’origine, car aucun numéro d’index n’est inclus dans les paramètres et nous inversons la chaîne à l’aide d’une stride négative. En outre, en utilisant une stride de -2, nous ignorons toutes les autres lettres de la chaîne inversée :

! krahS[espace]ymmaS

Dans cet exemple, le caractère d’espacement est imprimé.

Spécifiez le troisième paramètre de la syntaxe de la tranche Python pour indiquer la stride de la sous-chaîne que vous extrayez de la chaîne d’origine.

Méthodes de comptage

Bien que nous devions réfléchir pour trouver les numéros d’index pertinents qui correspondent aux caractères dans les chaînes, il vaut la peine d’étudier certaines des méthodes qui permettent de compter les chaînes ou renvoyer les numéros d’index. Cette méthode peut vous être utile pour limiter le nombre de caractères acceptés dans un formulaire que les utilisateurs devront compléter ou pour comparer les chaînes. Comme pour les autres types de données séquentielles, vous pouvez utiliser plusieurs méthodes pour compter les chaînes.

Nous allons tout d’abord découvrir la méthode len() qui vous permet d’obtenir la longueur de tout type de données qui se trouvent dans une séquence, que ce soit dans l’ordre ou pas et notamment des chaînes, des listes, des tuples et des dictionaries.

Imprimons la longueur de la chaîne ss :

print(len(ss))
Output
12

La longueur de la chaîne « Sammy Shark! » est de 12 caractères, parmi lesquels se trouvent le caractère d’espacement et le symbole du point d’exclamation.

Au lieu d’utiliser une variable, nous pouvons également passer une chaîne directement dans la méthode len() :

print(len("Let's print the length of this string."))
Output
38

La méthode len() compte le nombre total de caractères dans une chaîne.

Si nous souhaitons compter le nombre de fois qu’un caractère particulier ou une séquence de caractères apparaît dans une chaîne, nous pouvons le faire en utilisant la méthode str.count(). Prenons notre chaîne ss = "Sammy Shark!" et comptons le nombre de fois que le caractère « a » apparaît :

print(ss.count("a"))
Output
2

Nous pouvons rechercher un autre caractère :

print(ss.count("s"))
Output
0

Bien que la lettre « S » soit dans la chaîne, n’oubliez surtout pas que chaque caractère est sensible à la casse. Pour rechercher toutes les lettres dans une chaîne quelle que soit la cassse, nous pouvons utiliser la méthode str.lower() afin de tout d’abord convertir la chaîne en minuscules. Vous pouvez en savoir plus sur cette méthode, dans « Introduction aux méthodes de chaîne en Python 3. »

Essayons str.count() avec une séquence de caractères :

likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile."
print(likes.count("likes"))
Output
3

Dans la chaîne likes, la séquence de caractères équivalente à « likes » apparaît 3 fois dans la chaîne d’origine.

Nous pouvons également trouver la position à laquelle un caractère ou une séquence de caractères se trouve dans une chaîne. Pour cela, nous pouvons utiliser la méthode str.find() et renvoyer la position du caractère en fonction du numéro d’index.

Nous pouvons vérifier à quel endroit se trouve le premier « m » dans la chaîne ss :

print(ss.find("m"))
Ouput
2

Le premier caractère « m » se trouve à la position de l’index 2 dans la chaîne « Sammy Shark! » Nous pouvons examiner les positions du numéro d’index de la chaîne ss ci-dessus.

Voyons à quel endroit se trouve la première séquence de caractères « likes » qui se trouve dans la chaîne likes :

print(likes.find("likes"))
Ouput
6

La première instance de la séquence de caractères « likes » commence à la position numéro d’index 6, qui correspond à l’endroit où est positionné le caractère l dans la séquence likes.

Et que faire pour savoir à quel endroit commence la deuxième séquence de « likes » ? Pour cela, nous devons passer un second paramètre dans la méthode str.find() qui commencera par un numéro d’index spécifique. Donc, au lieu de commencer au début de la chaîne, commençons après l’index numéro 9 :

print(likes.find("likes", 9))
Output
34

Dans ce second exemple qui commence par l’index numéro 9, la première occurrence de la séquence de caractères « likes » commence à l’index numéro 34.

Nous pouvons également ajouter un troisième paramètre pour spécifier la fin de la plage. Comme pour le découpage, nous pouvons le faire en comptant à rebours, en utilisant un numéro d’index négatif :

print(likes.find("likes", 40, -6))
Output
64

Dans ce dernier exemple, nous recherchons la position de la séquence « likes » entre les numéros d’index 40 et -6. Étant donné que le paramètre final saisi est un numéro négatif, le décompte se fera à partir de la fin de la chaîne d’origine.

Vous pouvez utiliser les méthodes de chaîne len(), str.count() et str.find() pour déterminer la longueur, le nombre de caractères ou de séquences de caractères ainsi que la position de l’index de caractères ou de séquences de caractères dans les chaînes.

Conclusion

En ayant cette capacité d’appeler des numéros d’index spécifiques de chaînes ou une tranche particulière d’une chaîne, nous pouvons travailler avec ce type de données de manière plus flexible. Étant donné que les chaînes, comme les listes et les tuples, sont un type de données basées sur des séquences, vous pouvez y accéder via l’indexation et le découpage.

Pour continuer à développer vos connaissances sur les chaînes, n’hésitez à en lire davantage sur le formatage des chaînes et les méthodes de chaînes.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel