HOWTO · Python

Vérifier si une chaîne est un palindrome en Python

Découvrez six approches pour vérifier si une chaîne Python est un palindrome : le slicing de chaîne, reversed(), une boucle, la récursion, deque et la normalisation du texte pour ignorer la casse et les caractères non alphanumériques.

Sur cette page

Un palindrome se lit de la même façon de gauche à droite et de droite à gauche, comme level. Le test de base compare chaque caractère tel qu’il a été saisi. Normalisez d’abord le texte si la comparaison doit ignorer la casse, les espaces ou la ponctuation.

Vérifier si une chaîne Python est un palindrome avec le slicing

Le slicing d’une chaîne en crée une copie inversée. La tranche [::-1] parcourt la chaîne de son dernier caractère au premier ; la comparer à la chaîne d’origine constitue donc un test direct et concis. Remplacez level par la valeur que vous souhaitez vérifier.

word = "level"
print("Palindrome" if word == word[::-1] else "Not Palindrome")

Le slicing s’applique directement aux chaînes : ce n’est pas une méthode de liste. Cette comparaison tient compte de la casse et traite les espaces et la ponctuation comme des caractères ordinaires. Elle s’exécute en temps linéaire et crée une chaîne inversée.

Vérifier si une chaîne Python est un palindrome avec reversed()

La fonction intégrée reversed() renvoie un itérateur qui parcourt les caractères dans l’ordre inverse. Utilisez join() pour convertir cet itérateur en chaîne avant de la comparer à la chaîne d’origine.

word = "level"
reverse = "".join(reversed(word))
print(word == reverse)

reversed() ne renvoie pas directement une chaîne. La jonction et la comparaison parcourent les caractères : cette approche s’exécute donc en temps linéaire. Contrairement au slicing, elle ne crée pas d’abord une copie inversée au moyen d’une tranche.

Vérifier si une chaîne Python est un palindrome avec une boucle

Une boucle peut comparer chaque caractère à celui qui lui correspond à l’autre extrémité. L’indice de droite est len(word) - index - 1 ; vérifier uniquement la moitié des positions permet de couvrir toutes les paires.

word = "radar"
result = True
for index in range(len(word) // 2):
    if word[index] != word[len(word) - index - 1]:
        result = False
        break
print(result)

La boucle s’arrête dès qu’une paire diffère. Son travail est linéaire par rapport à la longueur de la chaîne et elle évite de créer une copie inversée.

Vérifier si une chaîne Python est un palindrome par récursion

La récursion compare les caractères aux deux extrémités, puis rappelle la même fonction avec la sous-chaîne située entre eux. Une chaîne de moins de deux caractères constitue le cas de base : il n’y a pas de caractères extérieurs différents à trouver.

def is_palindrome(text):
    if len(text) < 2:
        return True
    return text[0] == text[-1] and is_palindrome(text[1:-1])

print(is_palindrome("level"))

Cette version permet d’apprendre à réduire un problème en vérifications plus petites. Chaque appel découpe une sous-chaîne, ce qui entraîne des copies supplémentaires, et les entrées longues peuvent dépasser la limite de récursion de Python. Pour le code applicatif courant, préférez le slicing ou la boucle.

Vérifier si une chaîne Python est un palindrome avec une deque

Un collections.deque est une file à double extrémité. Elle permet de retirer un caractère de chaque côté et de comparer la paire. La création de la deque et la vérification de toutes les paires prennent ensemble un temps linéaire.

from collections import deque

def is_palindrome(text):
    chars = deque(text)
    while len(chars) > 1:
        if chars.popleft() != chars.pop():
            return False
    return True

print(is_palindrome("radar"))

Chaque retrait à une extrémité est une opération en temps constant, mais la vérification complète ne l’est pas : elle peut traiter tous les caractères. Cette méthode compare les caractères tels quels, y compris la casse, les espaces et la ponctuation.

Ignorer la casse et les caractères non alphanumériques lors d’une vérification de palindrome

Pour vérifier une phrase, mettez d’abord le texte en minuscules et ne conservez que les caractères alphanumériques. Cette règle change la définition du palindrome : la casse, les espaces et la ponctuation n’influencent plus la comparaison, tandis que les lettres et les chiffres restent pris en compte.

def is_palindrome(text):
    normalized = "".join(char.lower() for char in text if char.isalnum())
    return normalized == normalized[::-1]

phrase = "A man, a plan, a canal, Panama!"
print(is_palindrome(phrase))

isalnum() conserve les lettres et les chiffres. Les méthodes de chaîne de Python prennent en charge les caractères Unicode ; si une application n’accepte qu’un alphabet donné, définissez explicitement cette règle pour les caractères.

Choisir une méthode pour vérifier un palindrome en Python

Utilisez word == word[::-1] pour obtenir le test direct le plus court. Choisissez reversed() avec join() si une variante fondée sur un itérateur est utile, ou une boucle si les comparaisons explicites par paires et l’arrêt anticipé rendent la logique plus claire. Une deque permet également de comparer les deux extrémités. La récursion est surtout pédagogique, car chaque appel découpe le texte et les chaînes longues peuvent atteindre la limite de récursion.

Déterminez si vous voulez comparer l’entrée telle quelle ou la normaliser d’abord : ce choix détermine l’effet de la casse, des espaces et de la ponctuation sur le résultat. Pour découvrir d’autres techniques de traitement de texte, consultez les expressions régulières Python (regex).