Les chaines de caracteres⚓︎
crédit
crédit du notebook : Olivier Lecluse
Qu'est-ce qu'une chaîne.⚓︎
A retenir
Une chaîne de caractères est une liste particulière ne contenant que des caractères. Elle est délimitée par des guillemets (simples 'machaine' ou doubles "machaine").
Comme pour une liste, on peut accéder à ses éléments (les caractères) en spécifiant un indice :
chaine = "Lycée Saint Sauveur"
chaine[0]
Important
Par contre, il est impossible de modifier une chaîne de caractères !
On dit alors qu'il s'agit d'une liste non mutable :
chaine[1]= "a"
Si vous décidiez de lui ajouter des caractères en fin de chaîne à l'aide d'une concaténation du type suivant :
chaine = chaine+" - Redon"
chaine
Remarque : Contrairement aux apparences, la chaine n'a pas été modifiée puisque les chaines sont non mutables, une nouvelle chaine a été crée par concaténation des deux chaines placées autour du signe +
Il existe de nombreuses méthodes agissant sur les chaînes de caratères. Pour les voir, vous pouvez utiliser la fonction d'autocompletion de VSCode en tapant chaine.
puis en pressant la touche TAB. N'oubliez pas le . !
Vous devriez voir la liste des méthodes disponibles dans le terminal:
. | . | . | . |
---|---|---|---|
x.capitalize | x.isalnum | x.join | x.rsplit |
x.casefold | x.isalpha | x.ljust | x.rstrip |
x.center | x.isdecimal | x.lower | x.split |
x.count | x.isdigit | x.lstrip | x.splitlines |
x.encode | x.isidentifier | x.maketrans | x.startswith |
x.endswith | x.islower | x.partition | x.strip |
x.expandtabs | x.isnumeric | x.replace | x.swapcase |
x.find | x.isprintable | x.rfind | x.title |
x.format | x.isspace | x.rindex | x.translate |
x.format_map | x.istitle | x.rjust | x.upper |
x.index | x.isupper | x.rpartition | x.zfill |
Inutile de toutes les connaître. Nous allons voir ici les fonctions les plus utiles.
Couper et joindre⚓︎
La fonction split() permet de découper la chaîne de caractères qui lui est passée en paramètre suivant un ou des caractère(s) de séparation et renvoie une liste des chaînes découpées. Les caractères de séparation lui sont également passés en paramètre et, si ce n'est pas le cas, ce sera le caractère espace qui sera utilisé :
chaine="Lycée Saint Sauveur - Redon"
chaine.split()
chaine.split('-')
L'opération inverse s'appelle join(). Elle consiste a rendre une liste de chaînes de caractères pour former une chaîne en concaténant tous les éléments et en les assemblant à l'aide d'un caractère.
Cette méthode prend en paramètre une liste de caractères et s'applique à une chaîne de caractères désignant le ou les caractère(s) de liaison :
liste = ['Lycée Saint Sauveur', 'Redon']
' - '.join(liste)
Majuscule et minuscule⚓︎
Deux autres méthodes standards peuvent être utiles:
lower() et upper() permettant respectivement de convertir les caractères d'une chaîne en minuscules ou en majuscules.
Attention, bien que parlant de conversion, ces méthodes ne modifient pas la chaîne de départ mais renvoient une nouvelle chaîne :
chaine.upper()
chaine.lower()
La fonction capitalize() permet de ne mettre en majuscule que la première lettre d'une chaîne :
chaine.capitalize()
rechercher un caractère, une position etc... dans une chaîne.⚓︎
- La fonction len() permet, comme pour les listes, de connaîntre la longueur de la chaîne, c'est à dire compter le nombre de caractères.
chaine = "Lycée Saint Sauveur"
len(chaine)
- La méthode count() permet de compter le nombre d'occurrences d'une sous chaîne dans une chaîne de caractères.
Le premier paramètre est la chaîne dans laquelle effectuer la recherche et le second paramètre est la sous chaîne :
chaine.count('a')
- La méthode find() permet de trouver l'indice de la première occurrence d'une sous chaîne. Les paramètres sont les mêmes que pour la fonction count()
En cas d'échec, find() renvoie la valeur -1 ( 0 correspond à l'indice du premier caractère): On utilisera rfind() pour la dernière ocurrence.
chaine.find('a')
chaine.find('b')
chaine.rfind('a')
- index() est identique à find() mais retourne une erreur en cas d'échec
chaine.index('a')
chaine.index('b')
- La fonction replace() permet, comme son nom l'indique, de remplacer une sous chaîne par une autre à l'intérieur d'une chaîne de caractères.
Les paramètres sont, dans l'ordre : la chaîne de caractères à modifier, la sous chaîne à remplacer, la sous chaîne de remplacement,et, éventuellement, le nombre maximum d'occurrences à remplacer (si non spécifié, toutes les occurrences seront remplacées).
chaine.replace('a','@')
et bien sûr, la variable chaine n'est pas modifiée, c'est une nouvelle chaine qui est renvoyée par cette méthode !
chaine
Conversion chaîne <-> nombres⚓︎
Il ne faut pas confondre les objets 12 et "12". Le premier désigne un nombre, le second est une chaîne de caractère. Les comportements et les opérations sont différents.
12 == "12"
12+1
"12"+"1"
Il peut être néanmoins possible de convertir un nombre en chaîne et réciproquement comme on va le voir sur les exemples ci-dessous
int("12")
str(12)
Comparaison de chaînes de caractères⚓︎
De même qu'il est possible de comparer deux nombres, on peut aussi comparer des chaines par rapport à l'ordre lexicographique :
"a"<"b"
"a"<="r"<="z"
"a"<="R"<="z"
"toto"<"titi"
Tranches de chaînes⚓︎
Le tranchage (slicing) fonctionne exactement comme pour les listes. Observez les exemples suivants.
chaine = "Lycée Saint Sauveur"
# obtenir la fin d'une chaîne
chaine[6:]
# obtenir le début d'une chaîne
chaine[:5]
# Un intervalle
chaine[6:14]
Et avec des index négatifs ...
chaine[-1]
chaine[:-1]
# ce dernier exemple est très pratique pour renverser un itérable
chaine[::-1]
Parcourir une chaîne de caractères⚓︎
Une chaîne de raractère en Python rentre dans la catégorie des itérables au même titre que les listes. On retrouve donc les deux modes de parcours déjà rencontrés sur les listes, à savoir :
# Le parcours caractères par caractères :
chaine = "NSI"
for c in chaine:
print(c)
# Le parcours par indice
chaine = "NSI"
for i in range(len(chaine)):
print(chaine[i])