Chaines de caractères en Python

07 Feb 2017 07 Feb 2017 25637 vues ESSADDOUKI Mostafa 11 min de lecture

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

Définition Une chaîne de caractères est une suite ordonnée de caractères, stockée dans un objet de type 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 vide
Remarque Une chaîne vide n'est pas None : 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èrePython
Indice positif012345
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)
Sortie
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]}')
Sortie
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 !
Sortie
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"
  • s reste inchangée : "Python"
  • t est une nouvelle chaîne : "Jython"
À retenir Toute opération sur une chaîne retourne une nouvelle chaîne. La chaîne originale n'est jamais altérée. C'est une conséquence directe de l'immutabilité du type 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"
Remarque On ne peut concaténer qu'une chaîne avec une autre chaîne. Pour ajouter un nombre, il faut d'abord le convertir avec 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)
Astuce Pour une recherche insensible à la casse, convertissez d'abord la chaîne en minuscules : "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...')
Ordre Unicode En Unicode, les lettres majuscules (AZ, codes 65–90) précèdent les lettres minuscules (az, 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.

Principe fondamental Ces méthodes ne modifient jamais la chaîne initiale, conformément au principe d'immutabilité. Elles produisent soit une valeur numérique (indice, nombre), un booléen, soit une nouvelle chaîne ou une liste.

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,
  • -1 si 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)
Astuce La méthode 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 !
Sortie
ValueError: substring not found
Attention Préférez 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
Remarque Le comptage porte sur des sous-chaînes non chevauchantes. Par exemple, dans "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")   # False
Astuce Ces méthodes acceptent un tuple comme argument pour tester plusieurs préfixes/suffixes à la fois : s.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)
Sortie
["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.

Remarque Tous les éléments de la liste doivent être des chaînes. Sinon, une 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
Bonne pratique Pour concaténer efficacement un grand nombre de chaînes dans une boucle, préférez accumuler les éléments dans une liste, puis utiliser "".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éthodeDescriptionRetour
find(sub)Indice de la 1ʳᵉ occurrence de sub, ou -1int
index(sub)Comme find, mais lève ValueError si absentint
count(sub)Nombre d'occurrences non chevauchantes de subint
startswith(s)Teste si la chaîne commence par sbool
endswith(s)Teste si la chaîne se termine par sbool
strip()Supprime les espaces en début et finstr
lstrip()Supprime les espaces en débutstr
rstrip()Supprime les espaces en finstr
split(sep)Découpe en une liste selon le séparateurlist
sep.join(liste)Joint les éléments de la liste avec sepstr

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.