Comment indexer et couper des chaînes dans Python 3

introduction

Le type de données chaîne Python est une séquence composée d'un ou de plusieurs caractères individuels pouvant être constitués 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 les autres types de données basés sur des séquences, via l'indexation et le découpage en tranches.

Ce didacticiel vous guidera pour accéder aux chaînes à travers l'indexation, les découper en séquences de caractères et passer en revue certaines méthodes de comptage et de localisation des caractères.

Comment les chaînes sont indexées

Comme leslist data type qui ont des éléments qui correspondent à un numéro d'index, chacun des caractères d'une chaîne correspond également à un numéro d'index, commençant par le numéro d'index 0.

Pour la chaîneSammy Shark!, la répartition de l'index ressemble à ceci:

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 premierS commence à l'index 0 et la chaîne se termine à l'index 11 avec le symbole!.

Nous remarquons également que le caractère d'espacement entreSammy etShark correspond également à son propre numéro d'index. 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. Tout autre symbole ou signe de ponctuation, tel que*#$&.;?, est également un caractère et serait associé à son propre numéro d'index.

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

Accès aux caractères par numéro d’index positif

En référençant des numéros d'index, nous pouvons isoler l'un des caractères d'une chaîne. Pour ce faire, nous mettons les indices entre crochets. Déclarons une chaîne, l’imprimons et appelons le numéro d’index entre crochets:

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

Lorsque nous nous référons à un numéro d'index particulier d'une chaîne, Python renvoie le caractère qui se trouve à cette position. Puisque la lettrey est au numéro d'index 4 de la chaîness = "Sammy Shark!", lorsque nous imprimonsss[4], nous recevonsy en sortie.

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

Accès aux caractères par numéro d'index négatif

Si nous avons une longue chaîne et que nous voulons localiser un élément vers la fin, nous pouvons également compter à rebours à partir de la fin de la chaîne, en commençant au numéro d'index-1.

Pour la même chaîneSammy Shark!, la ventilation de l'indice négatif ressemble à ceci:

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 nombres d'index négatifs, nous pouvons imprimer le caractèrer, en se référant à sa position à l'index -3, comme ceci:

print(ss[-3])
Outputr

L'utilisation d'indices négatifs peut être avantageuse pour isoler un seul caractère vers la fin d'une longue chaîne.

Trancher des cordes

Nous pouvons également appeler une plage de caractères de la chaîne. Disons que nous aimerions simplement imprimer le motShark. Nous pouvons le faire en créant unslice, qui est une séquence de caractères dans une chaîne d'origine. Avec les tranches, 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])
OutputShark

Lors de la construction d'une tranche, comme dans[6:11], le premier numéro d'index est l'endroit où la tranche commence (inclus), et le deuxième numéro d'index est l'endroit où la tranche se termine (exclusif), c'est pourquoi dans notre exemple ci-dessus la plage a pour être le numéro d'index qui se produirait juste après la fin de la chaîne.

Lors du découpage de chaînes, nous créons unsubstring, qui est essentiellement une chaîne qui existe dans une autre chaîne. Lorsque nous appelonsss[6:11], nous appelons la sous-chaîneShark qui existe dans la chaîneSammy Shark!.

Si nous voulons inclure l'une ou l'autre extrémité d'une chaîne, nous pouvons omettre l'un des nombres dans la syntaxestring[n:n]. Par exemple, si nous voulons imprimer le premier mot de la chaîness - «Sammy» - nous pouvons le faire en tapant:

print(ss[:5])
OutputSammy

Nous avons fait cela en omettant le numéro d'index avant les deux points dans la syntaxe de la tranche et en n'incluant que le numéro d'index après les deux points, qui 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 s'imprime jusqu'à la fin, vous pouvez le faire en n'incluant que le numéro d'index situé avant les deux points, comme suit:

print(ss[7:])
Outputhark!

En n'incluant que le numéro d'index avant les deux points et en laissant le deuxième numéro d'index en dehors de la syntaxe, la sous-chaîne ira du caractère du 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 déjà vu, les indices négatifs d'une chaîne commencent à -1 et le compte à rebours commence au début de la chaîne. Lorsque vous utilisez des numéros d’index négatifs, nous commencerons par le nombre le plus bas, car il apparaît plus tôt dans la chaîne.

Utilisons deux nombres d'index négatifs pour découper la chaîness:

print(ss[-4:-1])
Outputark

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

Spécification de la foulée lors du découpage de chaînes

Le découpage en chaîne peut accepter un troisième paramètre en plus de deux numéros d'index. Le troisième paramètre spécifie lestride, qui fait référence au nombre de caractères à avancer une fois que le premier caractère est extrait de la chaîne. Jusqu'ici, nous avons omis le paramètre stride, et Python utilise par défaut la foulée de 1, de sorte que chaque caractère compris entre deux numéros d'index soit récupéré.

Reprenons l’exemple ci-dessus qui affiche la sous-chaîne «Shark»:

print(ss[6:11])
OutputShark

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

print(ss[6:11:1])
OutputShark

Ainsi, une foulée de 1 prendra chaque caractère entre deux numéros d'index d'une tranche. Si nous omettons le paramètre stride, alors Python utilisera 1 par défaut.

Si, au contraire, nous augmentons la foulée, nous verrons que les caractères sont ignorés:

print(ss[0:12:2])
OutputSmySak

Spécifier la foulée de 2 comme dernier paramètre dans la syntaxe Pythonss[0:12:2] saute tous les autres caractères. Regardons les caractères imprimés en rouge:

Samm [.highlight]yShar [.highlight]k!

Notez que le caractère d'espacement à l'index numéro 5 est également ignoré avec un pas de 2 spécifié.

Si nous utilisons un nombre plus grand pour notre paramètre stride, nous aurons une sous-chaîne beaucoup plus petite:

print(ss[0:12:4])
OutputSya

Spécifier la foulée de 4 comme dernier paramètre dans la syntaxe Pythonss[0:12:4] n'imprime que tous les quatre caractères. Encore une fois, regardons les caractères imprimés en rouge:

Samm [.highlight]y Shark!

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

Puisque nous imprimons la chaîne entière, nous pouvons omettre les deux numéros d’index et conserver les deux points dans la syntaxe pour obtenir le même résultat:

print(ss[::4])
OutputSya

L'omission des deux numéros d'index et le maintien des deux-points maintiendront la chaîne entière dans la plage, tandis que l'ajout d'un dernier paramètre pour stride spécifiera le nombre de caractères à ignorer.

De plus, vous pouvez indiquer une valeur numérique négative pour la foulée, que nous pouvons utiliser pour imprimer la chaîne d'origine dans l'ordre inverse si nous définissons la foulée à -1:

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

Les deux points sans paramètre spécifié incluront tous les caractères de la chaîne d'origine, une foulée de 1 inclura tous les caractères sans sauts, et inverser cette foulée inversera l'ordre des caractères.

Faisons-le à nouveau, mais avec une foulée 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 inversons la chaîne à travers la foulée négative. De plus, en ayant une foulée de -2, nous sautons toutes les lettres de la chaîne inversée:

!krahS[whitespace]ymmaS

Le caractère d'espacement est imprimé dans cet exemple.

En spécifiant le troisième paramètre de la syntaxe de tranche Python, vous indiquez le pas de la sous-chaîne que vous extrayez de la chaîne d'origine.

Méthodes de comptage

Bien que nous réfléchissions aux numéros d'index pertinents qui correspondent aux caractères dans les chaînes, il convient de passer en revue certaines des méthodes qui comptent les chaînes ou renvoient des numéros d'index. Cela peut être utile pour limiter le nombre de caractères que nous aimerions accepter dans un formulaire de saisie utilisateur ou pour comparer des chaînes. Comme les autres types de données séquentiels, les chaînes peuvent être comptées selon plusieurs méthodes.

Nous allons d'abord examiner la méthodelen() qui peut obtenir la longueur de tout type de données qui est une séquence, qu'elle soit ordonnée ou non, y compris les chaînes, les listes, lestuples et lesdictionaries.

Imprimons la longueur de la chaîness:

print(len(ss))
Output12

La longueur de la chaîne «Sammy Shark!» Compte 12 caractères, y compris le caractère blanc et le symbole du point d'exclamation.

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

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

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

Si nous voulons 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 avec la méthodestr.count(). Travaillons avec notre chaîness = "Sammy Shark!" et comptons le nombre de fois où le caractère «a» apparaît:

print(ss.count("a"))
Output2

Nous pouvons rechercher un autre personnage:

print(ss.count("s"))
Output0

Bien que la lettre «S» soit dans la chaîne, il est important de garder à l'esprit que chaque caractère est sensible à la casse. Si nous voulons rechercher toutes les lettres d'une chaîne quelle que soit la casse, nous pouvons utiliser la méthodestr.lower() pour convertir d'abord la chaîne en minuscules. Vous pouvez en savoir plus sur cette méthode dans «https://www.digitalocean.com/community/tutorials/an-inintroduction-to-string-methods-in-python-3#making-strings-upper-and-lower-case [Une introduction aux méthodes de chaîne dans Python 3]. ”

Essayonsstr.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"))
Output3

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

Nous pouvons également trouver à quelle position un caractère ou une séquence de caractères se produit dans une chaîne. Nous pouvons le faire avec la méthodestr.find(), et elle retournera la position du caractère en fonction du numéro d'index.

Nous pouvons vérifier où se trouve le premier «m» dans la chaîness:

print(ss.find("m"))
Ouput2

Le premier caractère «m» apparaît à la position d'index 2 dans la chaîne «Sammy Shark!» Nous pouvons revoir les positions des numéros d'index de la chaînessabove.

Voyons où se trouve la première séquence de caractères "J'aime" dans la chaînelikes:

print(likes.find("likes"))
Ouput6

La première instance de la séquence de caractères «aime» commence à la position du numéro d'index 6, qui est l'endroit où le caractèrel de la séquencelikes est positionné.

Et si nous voulons voir où commence la deuxième séquence de «j'aime»? Nous pouvons le faire en passant un deuxième paramètre à la méthodestr.find() qui commencera à un numéro d'index particulier. Ainsi, au lieu de commencer au début de la chaîne, commençons après le numéro d’index 9:

print(likes.find("likes", 9))
Output34

Dans ce deuxième exemple qui commence au numéro d’index de 9, la première occurrence de la séquence de caractères «likes» commence au numéro d’index 34.

De plus, nous pouvons spécifier une fin à la plage en tant que troisième paramètre. Comme pour le découpage en tranches, nous pouvons le faire en comptant à rebours en utilisant un indice négatif:

print(likes.find("likes", 40, -6))
Output64

Ce dernier exemple recherche la position de la séquence «aime» entre les numéros d’index de 40 et -6. Comme le dernier paramètre entré est un nombre négatif, il comptera à partir de la fin de la chaîne d'origine.

Les méthodes de chaîne delen(),str.count() etstr.find() peuvent être utilisées pour déterminer la longueur, le nombre de caractères ou de séquences de caractères et les positions d'index des caractères ou des séquences de caractères dans les chaînes.

Conclusion

Pouvoir appeler des numéros d'index spécifiques de chaînes, ou une tranche particulière d'une chaîne, nous donne une plus grande flexibilité lorsque vous travaillez avec ce type de données. Étant donné que les chaînes, comme les listes et les n-uplets, sont un type de données basé sur une séquence, vous pouvez y accéder via l'indexation et le découpage en tranches.

Vous pouvez en savoir plus surformatting strings etstring methods pour continuer à découvrir les chaînes.