HOWTO · Python

Comment convertir une chaîne de caractères en liste en Python

Une chaîne peut être convertie en liste en Python avec list(), split(), ast.literal_eval() et les compréhensions de liste.

Sur cette page

Choisissez la méthode selon les éléments que doit contenir la liste. Utilisez list(text) pour un élément par caractère, text.split() pour les mots ou valeurs délimités, ast.literal_eval(text) pour un littéral Python de confiance et une compréhension pour filtrer ou transformer. N’utilisez pas eval() avec une entrée que vous ne contrôlez pas : elle peut exécuter du code Python arbitraire.

Convertir une chaîne en caractères avec list()

list() parcourt une chaîne et produit un élément de liste pour chaque caractère Unicode. Elle ne découpe pas une phrase en mots.

text = "Hello"
characters = list(text)
print(characters)

Sortie :

['H', 'e', 'l', 'l', 'o']

Utilisez-la lorsque le traitement caractère par caractère est voulu. Une chaîne vide devient [] ; les espaces et la ponctuation sont aussi des caractères, pas des séparateurs.

Séparer mots ou valeurs avec split()

Pour des mots séparés par des espaces arbitraires, appelez split() sans argument. Les espaces consécutifs forment un seul séparateur et les espaces en début ou fin sont ignorés. Passez un séparateur explicite lorsque le format d’entrée en définit un.

sentence = "Convert this string to a list"
words = sentence.split()
print(words)

Sortie :

['Convert', 'this', 'string', 'to', 'a', 'list']

Pour des données séparées par des virgules, utilisez split(",") et appliquez strip() à chaque champ si des espaces après les virgules sont autorisés :

text = "red, green, blue"
colors = [item.strip() for item in text.split(",")]
print(colors)

Sortie :

['red', 'green', 'blue']

Avec un séparateur explicite, les champs vides sont conservés, et un séparateur absent laisse toute la chaîne comme un seul élément. Si l’entrée est du CSV avec des virgules entre guillemets, utilisez le module csv plutôt que d’étendre split().

Utilisez maxsplit lorsque seuls les premiers séparateurs doivent créer des limites. Par exemple, maxsplit=1 conserve le reste dans le second élément :

text = "red,green,blue"
first_two = text.split(",", maxsplit=1)
print(first_two)

Sortie :

['red', 'green,blue']

Analyser un texte représentant une liste

Si la chaîne est une représentation littérale Python telle que "[1, 2, 3]", utilisez ast.literal_eval(). Elle accepte des littéraux et des conteneurs plutôt que d’exécuter des expressions arbitraires, mais attend toujours une entrée valide et de confiance, et peut lever ValueError ou SyntaxError pour un texte mal formé.

import ast

text = "[1, 2, 3]"
values = ast.literal_eval(text)
if not isinstance(values, list):
    raise TypeError("expected a list literal")
print(values)

Sortie :

[1, 2, 3]

Ne supposez pas que chaque analyse réussie est une liste : une chaîne comme "(1, 2)" produit un tuple, d’où l’intérêt du contrôle de type. Pour du texte JSON, utilisez json.loads() ; la syntaxe littérale Python et JSON sont proches mais pas identiques. Ne remplacez jamais literal_eval() par eval() pour une entrée non fiable.

Transformer ou filtrer avec une compréhension

Utilisez une compréhension lorsque la conversion inclut une règle, par exemple ne garder que les chiffres ou changer la casse :

text = "P y 3"
digits = [char for char in text if char.isdigit()]
print(digits)

Sortie :

['3']

L’expression peut aussi transformer chaque élément, par exemple [char.lower() for char in text if char.isalpha()]. Une compréhension porte sur les caractères sauf si vous appelez d’abord split() ; combinez les deux pour normaliser des mots.

Choisir la bonne méthode

Utilisez list() pour les caractères, split() pour un délimiteur connu, ast.literal_eval() pour un format littéral Python validé et une compréhension pour filtrer ou transformer. Validez l’entrée externe avant l’analyse et choisissez un analyseur spécifique lorsque la source est CSV ou JSON. Ces distinctions évitent l’erreur courante d’obtenir une liste de caractères alors que des mots étaient attendus, ou d’exécuter une entrée qui ne devait être que des données.