En algorithmique et en programmation, les chaînes de caractères sont fondamentales. Elles servent à représenter et traiter des données textuelles telles que mots, phrases, codes, identifiants, séquences biologiques ou contenus de fichiers.
En Python, leur utilisation est incontournable, que ce soit pour :
- la lecture et l'écriture de fichiers,
- les interactions avec l'utilisateur,
- le traitement de données textuelles,
- ou la résolution d'une multitude de problèmes algorithmiques.
Introduction
Lien avec les listes
La chaîne de caractères est souvent perçue comme une « liste de caractères », mais avec une distinction majeure.
Le point commun : la séquence ordonnée
Comme une liste, la chaîne est ordonnée. Chaque caractère possède un index (une position) commençant à 0. On peut donc utiliser le slicing (découpage) :
Exemple
nom = "Python"
print(nom[0]) # 'P'La différence capitale : l'immutabilité
Contrairement à une liste, on ne peut pas modifier un caractère au sein d'une chaîne existante.
- Dans une liste :
ma_liste[0] = "A"est autorisé. - Dans une chaîne :
ma_chaine[0] = "A"provoquera une erreur (TypeError).
Pour modifier une chaîne, il faut en créer une nouvelle par concaténation ou transformation. Cette propriété garantit une plus grande sécurité et une optimisation de la gestion mémoire par Python.
Notions fondamentales sur les chaînes
Définition et création
str. Un caractère est une unité élémentaire représentant :- une lettre (
'a','Z'), - un chiffre (
'0','7'), - un symbole (
'+','@','?'), - ou un caractère spécial (espace, retour à la ligne, etc.).
Une chaîne de caractères se crée à l'aide de :
- guillemets simples
'...' - ou guillemets doubles
"..."
Exemple
s1 = 'Python'
s2 = "Algorithmique"
s3 = '' # chaîne videNone : c'est une chaîne de longueur 0. On peut le vérifier avec len(s3) == 0 qui retourne True.Longueur d'une chaîne
La longueur d'une chaîne correspond au nombre de caractères qu'elle contient. Elle est obtenue avec la fonction intégrée len. Les espaces et caractères spéciaux comptent comme des caractères.
s = "Python"
len(s) # 6
s2 = "Bonjour !"
len(s2) # 9 (l'espace et '!' comptent)Accès aux caractères
Chaque caractère occupe une position précise appelée index.
Indexation positive
Les chaînes sont indexées à partir de 0. Le premier caractère est à l'indice 0, le dernier à l'indice len(s) - 1.
Exemple
s = "Python"
s[0] # 'P'
s[5] # 'n'
s[len(s)-1] # 'n' (dernier caractère)Indexation négative
Très pratique en Python, l'indexation négative commence à -1 (dernier caractère) et remonte vers le début jusqu'à -len(s).
Exemple
s = "Python"
s[-1] # 'n' (dernier)
s[-2] # 'o'
s[-6] # 'P' (premier)| Caractère | P | y | t | h | o | n |
|---|---|---|---|---|---|---|
| Indice positif | 0 | 1 | 2 | 3 | 4 | 5 |
| Indice négatif | -6 | -5 | -4 | -3 | -2 | -1 |
Parcours d'une chaîne
Parcours direct
On peut parcourir une chaîne caractère par caractère. Chaque itération fournit un caractère, et non une sous-chaîne.
Exemple
for c in "Python":
print(c)P y t h o n
Parcours par indices
Il est aussi possible de parcourir une chaîne par ses indices. Cette méthode est utile lorsque l'indice joue un rôle algorithmique.
Exemple
s = "Python"
for i in range(len(s)):
print(f'{i}, {s[i]}')0, P 1, y 2, t 3, h 4, o 5, n
Immutabilité des chaînes
Les chaînes de caractères sont immutables : une fois créées, elles ne peuvent pas être modifiées.
Exemple — tentative de modification
s = "Python"
s[0] = 'J' # Erreur !TypeError: 'str' object does not support item assignment
Toute « modification » d'une chaîne implique en réalité la création d'une nouvelle chaîne.
Exemple — création d'une nouvelle chaîne
s = "Python"
t = "J" + s[1:] # t = "Jython"sreste inchangée :"Python"test une nouvelle chaîne :"Jython"
str.Opérations élémentaires
La Concaténation (+)
La concaténation consiste à assembler deux chaînes ou plus pour n'en former qu'une seule. L'opérateur + crée une nouvelle chaîne en mettant bout à bout les opérandes.
Exemple
s1 = "Mar"
s2 = "oc"
s = s1 + s2 # s = "Maroc"str().Exemple avec conversion
s1 = "Maroc"
a = 2026
s = s1 + str(a) # s = "Maroc2026"La Répétition (*)
L'opérateur * permet de dupliquer une chaîne un nombre entier de fois.
Exemple
ch = '-' * 5
print(ch) # Affiche : -----
separateur = '=' * 30
print(separateur) # ============================== L'appartenance (in)
L'opérateur in est un opérateur booléen qui vérifie si une sous-chaîne est présente dans une autre. Il est sensible à la casse (majuscules/minuscules).
Exemple
phrase = "L'algorithmique est l'art de résoudre des problèmes."
print("art" in phrase) # True
print("Python" in phrase) # False
print("Art" in phrase) # False (à cause du 'A' majuscule)"Art".lower() in phrase.lower() retourne True.Comparaisons lexicographiques
En Python, les opérateurs de comparaison (<, >, <=, >=, ==, !=) s'appliquent aux chaînes selon l'ordre lexicographique (l'ordre du dictionnaire, basé sur le code Unicode). La comparaison se fait caractère par caractère, de gauche à droite.
Exemple
nom1 = "ahmed"
nom2 = "Ahmed"
nom3 = "Abdelallah"
print(nom1 > nom2) # True ('a' > 'A' en Unicode)
print(nom1 > nom3) # True
print(nom2 < nom3) # False ('Ah...' > 'Ab...')A–Z, codes 65–90) précèdent les lettres minuscules (a–z, codes 97–122). Ainsi "ahmed" > "Ahmed" car ord('a') = 97 > ord('A') = 65.Méthodes essentielles des chaînes
Les chaînes de caractères en Python disposent d'un grand nombre de méthodes intégrées permettant d'effectuer des opérations fréquentes : recherche, comptage, transformation, découpage et recomposition.
Recherche d'une sous-chaîne : find
La méthode find permet de rechercher la première occurrence d'une sous-chaîne dans une chaîne. Elle renvoie :
- l'indice de la première occurrence si elle existe,
-1si la sous-chaîne est absente.
Exemple
s = "Morocco"
print(s.find('o')) # 1
print(s.find('s')) # -1
print(s.find('o', 2)) # 4 (recherche à partir de l'indice 2)find ne provoque jamais d'erreur, même si la sous-chaîne n'existe pas. C'est la méthode recommandée quand on veut tester l'existence d'une sous-chaîne.Recherche stricte : index
La méthode index fonctionne comme find, mais lève une exception si la sous-chaîne n'est pas trouvée.
Exemple
s = "Morocco"
print(s.index('s')) # Erreur !ValueError: substring not found
find à index lorsque l'absence de la sous-chaîne est une situation normale. Utilisez index uniquement lorsque son absence représente une erreur logique à signaler.Comptage d'occurrences : count
La méthode count renvoie le nombre total d'occurrences d'une sous-chaîne.
Exemple
s = "banana"
s.count("a") # 3
s.count("na") # 2
s.count("an") # 2"aaa", count("aa") retourne 1 et non 2.Tests de préfixe et suffixe
startswith
Teste si une chaîne commence par une sous-chaîne donnée. Retourne un booléen.
Exemple
s = "algorithmique"
s.startswith("algo") # True
s.startswith("Algo") # False (sensible à la casse)endswith
Teste si une chaîne se termine par une sous-chaîne donnée. Retourne un booléen.
Exemple
s = "algorithmique"
s.endswith("ique") # True
s.endswith("math") # Falses.startswith(("algo", "Algo")) retourne True pour les deux formes.Suppression des espaces : strip
Les méthodes strip, lstrip et rstrip suppriment les espaces (ou caractères donnés) en début et/ou fin de chaîne.
Exemple
s = " python "
s.strip() # "python"
s.lstrip() # "python " (supprime à gauche uniquement)
s.rstrip() # " python" (supprime à droite uniquement)
# Avec un caractère spécifique
s2 = "###titre###"
s2.strip('#') # "titre"Découpage en sous-chaînes : split
La méthode split découpe une chaîne en une liste de sous-chaînes. Par défaut, la séparation se fait sur les espaces (et tabulations, sauts de ligne).
Exemple — séparateur par défaut
phrase = "L'algorithmique est l'art de résoudre des problèmes."
mots = phrase.split()
print(mots)["L'algorithmique", 'est', "l'art", 'de', 'résoudre', 'des', 'problèmes.']
Il est possible de préciser le séparateur en argument.
Exemple — séparateur personnalisé
res = "2026-01-05".split("-")
print(res) # ['2026', '01', '05']
csv_line = "Alice,25,Rabat"
champs = csv_line.split(",")
print(champs) # ['Alice', '25', 'Rabat']Recomposition : join
La méthode join permet de reconstruire une chaîne à partir d'une liste de chaînes. Elle est l'opération inverse de split.
TypeError est levée.Exemple
mots = ["CPGE", "MP", "Python"]
print(" ".join(mots)) # CPGE MP Python
print("-".join(mots)) # CPGE-MP-Python
print("".join(mots)) # CPGEMPPython"".join(liste) plutôt que l'opérateur + répété — cela évite la création d'objets intermédiaires.Tableau récapitulatif des méthodes
| Méthode | Description | Retour |
|---|---|---|
find(sub) | Indice de la 1ʳᵉ occurrence de sub, ou -1 | int |
index(sub) | Comme find, mais lève ValueError si absent | int |
count(sub) | Nombre d'occurrences non chevauchantes de sub | int |
startswith(s) | Teste si la chaîne commence par s | bool |
endswith(s) | Teste si la chaîne se termine par s | bool |
strip() | Supprime les espaces en début et fin | str |
lstrip() | Supprime les espaces en début | str |
rstrip() | Supprime les espaces en fin | str |
split(sep) | Découpe en une liste selon le séparateur | list |
sep.join(liste) | Joint les éléments de la liste avec sep | str |
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.