len() en Python - comprendre et éviter les erreurs

Alfred Jacques .

18 octobre 2026

Mains sur un clavier, un écran affiche du code Python avec une erreur de syntaxe.

Compter les caractères d’un texte, les éléments d’une liste ou les clés d’un dictionnaire fait partie des besoins les plus courants en Python. La fonction len() répond à cette question en une seule ligne, mais son résultat dépend du type d’objet utilisé. Je présente ici son fonctionnement, ses cas pratiques, ses limites et les erreurs à éviter.

L’essentiel à retenir sur len en Python

  • len() renvoie le nombre d’éléments contenus dans un objet.
  • Elle fonctionne avec les chaînes, listes, tuples, dictionnaires, ensembles et intervalles.
  • Pour un dictionnaire, le résultat correspond au nombre de clés, pas au nombre total de valeurs imbriquées.
  • Une chaîne compte des points de code Unicode, tandis qu’un objet bytes compte des octets.
  • Un générateur ou un entier ne possède généralement pas de longueur mesurable avec cette fonction.

Comprendre len en Python sans se tromper

La syntaxe est volontairement simple : len(objet). Python examine l’objet transmis et renvoie un entier correspondant au nombre d’éléments qu’il contient. Dans la pratique, c’est l’outil que j’utilise dès que je dois vérifier une taille avant une boucle, contrôler une saisie ou afficher un bilan de données.

message = "Bonjour"
print(len(message))  # 7

Le résultat est un entier, ici 7, car la chaîne contient sept caractères. Les espaces et les signes de ponctuation sont également comptés. Une chaîne vide renvoie donc 0, ce qui permet de tester rapidement si une variable contient réellement du texte.

nom = ""

if len(nom) == 0:
    print("Aucun nom n'a été saisi")

Pour tester simplement si une collection est vide, je préfère souvent écrire if not collection. C’est plus idiomatique et plus lisible, mais len() reste préférable lorsque le nombre exact d’éléments doit être affiché ou comparé à une limite.

Quels objets peut-on mesurer avec len

La fonction s’applique aux objets qui définissent une longueur. Cela concerne notamment les séquences et les collections intégrées de Python. Le résultat ne représente pas toujours la même chose, d’où l’intérêt de regarder le type de données avant d’interpréter le nombre obtenu.

Chaînes, listes et tuples

texte = "Python"
nombres = [10, 20, 30, 40]
coordonnees = (48.8566, 2.3522)

print(len(texte))         # 6
print(len(nombres))       # 4
print(len(coordonnees))   # 2

Dans une liste imbriquée, len() compte uniquement les éléments du premier niveau. C’est une source classique de confusion chez les débutants.

grille = [[1, 2, 3], [4, 5, 6]]

print(len(grille))       # 2
print(len(grille[0]))    # 3

La grille contient deux lignes et chaque ligne contient trois valeurs. Pour connaître le nombre total de valeurs, il faut additionner les longueurs internes ou parcourir la structure, car len(grille) ne descend pas automatiquement dans les sous-listes.

Dictionnaires et ensembles

profil = {
    "nom": "Camille",
    "ville": "Lyon",
    "actif": True
}

couleurs = {"bleu", "vert", "rouge"}

print(len(profil))    # 3
print(len(couleurs))  # 3

Pour un dictionnaire, la longueur correspond au nombre de paires clé-valeur. Les valeurs imbriquées ne sont pas additionnées. Dans un ensemble, chaque élément unique compte une fois, ce qui explique pourquoi les doublons disparaissent avant le calcul.

Lire aussi : Hash Python - Évitez les erreurs courantes et sécurisez vos données

Intervalles numériques

intervalle = range(2, 12, 2)
print(len(intervalle))  # 5

La fonction tient compte du début, de la fin et du pas de l’intervalle. Ici, les valeurs sont 2, 4, 6, 8 et 10. Pour un range très grand, Python calcule la longueur sans créer toutes les valeurs en mémoire, ce qui rend cette structure particulièrement efficace.

La différence entre caractères, octets et éléments

Le mot « longueur » peut désigner plusieurs choses. Avec une chaîne Python, len() compte les points de code Unicode. Avec un objet bytes, la fonction compte les octets. Cette distinction devient importante dès qu’un texte doit être envoyé sur un réseau ou enregistré dans un fichier avec un encodage précis.

texte = "café"

print(len(texte))                 # 4
print(len(texte.encode("utf-8"))) # 5

Le caractère é compte comme un seul caractère dans la chaîne, mais il occupe deux octets en UTF-8. Pour une limite exprimée en caractères, utilisez la chaîne directement. Pour une limite exprimée en octets, mesurez plutôt le résultat de encode().

emoji = "👨‍👩‍👧‍👦"
print(len(emoji))  # plusieurs points de code

Un emoji composé peut être affiché comme un seul symbole tout en contenant plusieurs points de code. C’est pourquoi la valeur renvoyée ne correspond pas toujours au nombre de signes visibles à l’écran. Pour compter des graphèmes, c’est-à-dire des unités visuelles perçues par l’utilisateur, une bibliothèque spécialisée peut être nécessaire.

Les erreurs courantes avec len

La plupart des erreurs viennent d’une confusion entre un objet mesurable et une valeur qui ne possède pas de longueur. Un entier, un nombre décimal ou la valeur None ne sont pas des collections.

age =  thirty = 30

# len(age)       # TypeError
# len(thirty)    # TypeError
# len(None)      # TypeError

Le code ci-dessus contient volontairement une erreur de syntaxe sur la première ligne. Dans un programme réel, la bonne écriture serait simplement age = 30, mais len(age) resterait incorrect. Si vous voulez compter les chiffres d’un nombre, convertissez-le explicitement en texte.

code = 2026
print(len(str(code)))  # 4

Un autre piège concerne les générateurs et les itérateurs. Ils produisent souvent leurs valeurs progressivement et ne connaissent pas nécessairement leur taille à l’avance.

nombres = (n for n in range(5))

# len(nombres)  # TypeError

valeurs = list(nombres)
print(len(valeurs))    # 5

Convertir un générateur en liste permet de le mesurer, mais consomme ses valeurs et peut demander beaucoup de mémoire. Pour un flux important, je préfère compter les éléments pendant le traitement plutôt que de tout charger d’un coup.

Utiliser len dans un code vraiment utile

La fonction devient intéressante lorsqu’elle sert une décision concrète. Elle permet par exemple de valider un mot de passe, de limiter une saisie ou de parcourir une liste avec ses positions.

mot_de_passe = "secret123"

if len(mot_de_passe) < 8:
    print("Mot de passe trop court")
else:
    print("Longueur acceptable")

Cette vérification ne suffit pas à garantir un mot de passe solide, mais elle constitue une première règle simple. Dans une application, il faut aussi traiter les caractères autorisés, les tentatives répétées et le stockage sécurisé.

articles = ["clavier", "souris", "écran"]

for index in range(len(articles)):
    print(index, articles[index])

Cette forme fonctionne, mais une boucle directe est souvent plus claire lorsque l’index n’est pas nécessaire. Si vous avez besoin du numéro et de la valeur, enumerate() est généralement le meilleur choix.

for index, article in enumerate(articles):
    print(index, article)

Pour les performances, les collections intégrées comme les listes, dictionnaires et ensembles fournissent habituellement leur taille très rapidement. Cela ne signifie pas que toute implémentation personnalisée est forcément constante en temps. Une classe créée par un développeur peut calculer sa longueur au moment de l’appel, avec un coût plus élevé.

Créer un objet compatible avec len

Une classe personnalisée peut définir la méthode spéciale __len__(). Python l’utilisera automatiquement lorsque l’objet sera passé à len(). La méthode doit renvoyer un entier positif ou nul.

class Playlist:
    def __init__(self, titres):
        self.titres = titres

    def __len__(self):
        return len(self.titres)

playlist = Playlist(["Intro", "Couplet", "Final"])
print(len(playlist))  # 3

Cette approche rend la classe naturelle à utiliser et permet aussi des tests comme if playlist. Lorsque la longueur vaut zéro, l’objet est considéré comme faux dans un contexte booléen, sauf si la classe définit un comportement particulier avec __bool__().

Je recommande de déléguer le calcul à une collection interne déjà disponible plutôt que de recompter les données à chaque appel. Le code reste plus simple et la longueur conserve un comportement prévisible.

Les bons réflexes à garder en tête

  • Utilisez len(objet) pour mesurer une collection, pas une valeur numérique.
  • Vérifiez si vous comptez des caractères, des octets, des clés ou des éléments du premier niveau.
  • Ne transformez pas automatiquement un gros générateur en liste sans évaluer le coût mémoire.
  • Préférez if not objet pour tester rapidement une collection vide.
  • Avec une classe personnalisée, faites renvoyer à __len__() un entier cohérent et non négatif.

La fonction paraît minuscule, mais elle intervient dans la validation des données, les boucles, les interfaces et le traitement de fichiers. Une fois la différence entre taille, caractères et octets bien comprise, len() devient un réflexe fiable plutôt qu’une simple commande apprise par cœur.

Questions fréquentes

Dans une chaîne, len() compte les caractères, espaces et signes de ponctuation. Dans une liste ou un tuple, elle compte uniquement les éléments du premier niveau : len([[1, 2], [3, 4]]) renvoie donc 2, et non 4.
Pour un dictionnaire, len() renvoie le nombre de paires clé-valeur, sans additionner les valeurs imbriquées. Pour un ensemble, elle compte les éléments uniques, car les doublons sont supprimés.
Une chaîne compte des points de code Unicode, tandis qu’un objet bytes compte des octets. Ainsi, len("café") vaut 4, alors que la longueur de "café".encode("utf-8") vaut 5. Un emoji composé peut également contenir plusieurs points de code malgré son affichage comme un seul symbole.
Les entiers, nombres décimaux et valeurs None ne possèdent pas de longueur mesurable, ce qui provoque une TypeError. Un générateur ne connaît généralement pas sa taille à l’avance : vous pouvez le convertir en liste pour le compter, mais cette opération consomme ses valeurs et peut utiliser beaucoup de mémoire.
Évaluer l'article

Moyenne: 0.0 / 5 · 0 évaluations

Tags

chaînes listes dictionnaires unicode générateurs
Autor Alfred Jacques
Alfred Jacques
Je m'appelle Alfred Jacques et j'ai accumulé 12 ans d'expérience dans le domaine des technologies, en particulier dans les secteurs du web, de l'intelligence artificielle, des réseaux et de la sécurité. Mon intérêt pour ces sujets a débuté dès mon adolescence, lorsque j'ai découvert les possibilités infinies qu'offrent les nouvelles technologies. J'aime explorer les enjeux complexes de ces domaines et partager des informations claires et accessibles pour aider mes lecteurs à mieux comprendre les défis et les évolutions technologiques. Dans mes écrits, je m'efforce de fournir des analyses précises et à jour, en vérifiant mes sources et en comparant différentes perspectives. Je m'engage à simplifier des concepts parfois difficiles afin de rendre l'information utile et compréhensible pour tous. Que ce soit en suivant les dernières tendances ou en organisant mes connaissances de manière claire, je souhaite que mes articles soient une ressource précieuse pour ceux qui s'intéressent à la technologie et à ses implications dans notre quotidien.
Commentaires (1)
  • S

    Simon

    18 octobre 2026

    Ah, len() en Python, c'est un peu comme le couteau suisse du développeur, non ? 🙂 Je me souviens, chez ma voisine l'autre jour, son petit-fils, il apprenait Python à l'école et il galérait justement avec les dictionnaires. Il ne comprenait pas pourquoi ça lui donnait le nombre de clés et pas toutes les valeurs. Je lui avais dit que c'était une subtilité, mais là, l'article explique ça super bien, c'est clair comme de l'eau de roche ! Ça m'a rappelé de bons souvenirs.

    Alfred JacquesAlfred JacquesAuteur

    18 octobre 2026

    Super, c'est exactement ce que je voulais osiągnąć ! Merci pour ton retour. 😊

Ajouter un commentaire