HOWTO · Python
Comment convertir une chaîne de caractères en liste en Python
Découvrez quand utiliser list(), split(), ast.literal_eval() ou une compréhension de liste pour convertir une chaîne Python en caractères, mots, champs délimités ou données de liste validées.
Sur cette page
Choisissez la méthode en fonction de ce que chaque élément de la liste doit représenter. Utilisez list(text) pour obtenir un élément par caractère, text.split() pour séparer des mots ou des valeurs délimitées, ast.literal_eval(text) pour analyser un texte de confiance qui représente déjà un littéral Python, et une compréhension de liste pour filtrer ou transformer des éléments. N’utilisez pas eval() avec une entrée que vous ne contrôlez pas entièrement : cette fonction 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 pour chaque point de code Unicode. Elle ne découpe pas une phrase en mots. Par exemple, un accent combiné peut constituer un point de code distinct, même s’il apparaît visuellement attaché à une lettre.
text = "Hello"
characters = list(text)
print(characters)
Cette méthode convient au traitement caractère par caractère. Les espaces et les signes de ponctuation sont eux aussi inclus comme caractères : supprimez-les ou transformez-les explicitement si le traitement souhaité l’exige.
Séparer des mots ou des valeurs délimitées avec split()
Appelez split() sans argument pour séparer les mots sur les suites de caractères blancs. Les espaces au début et à la fin sont ignorés ; plusieurs espaces, tabulations ou retours à la ligne consécutifs servent de séparateur unique.
sentence = "Convert this string to a list"
words = sentence.split()
print(words)
Si l’entrée utilise un délimiteur connu, indiquez-le explicitement. Lorsque les espaces autour des champs séparés par des virgules sont autorisés, supprimez-les après le découpage :
text = "red, green, blue"
colors = [item.strip() for item in text.split(",")]
print(colors)
Un séparateur explicite conserve les champs vides : "red,,blue".split(",") contient une chaîne vide entre les deux virgules. Si le séparateur est absent, la chaîne d’origine est renvoyée comme unique élément. Utilisez maxsplit pour limiter le nombre de découpages ; "red,green,blue".split(",", maxsplit=1) conserve green,blue ensemble dans le deuxième élément.
split() n’est pas un analyseur CSV. Si les champs peuvent contenir des délimiteurs entre guillemets, comme dans "red, bright",blue, utilisez le module Python csv afin que les règles de mise entre guillemets soient correctement prises en charge.
Analyser un texte représentant déjà une liste
Si le texte suit déjà la syntaxe des littéraux Python, par exemple "[1, 2, 3]", analysez-le avec ast.literal_eval(). Cette fonction accepte les valeurs littérales et les conteneurs sans évaluer d’expressions arbitraires. Le texte doit toutefois être syntaxiquement valide ; une entrée mal formée peut provoquer une exception ValueError ou SyntaxError.
import ast
text = "[1, 2, 3]"
values = ast.literal_eval(text)
if isinstance(values, list):
print(values)
else:
print("The parsed value is not a list")
Une analyse réussie ne garantit pas que le résultat soit une liste : "(1, 2)", par exemple, représente un tuple. Vérifiez le type obtenu avant de l’utiliser comme une liste, et gérez les erreurs d’analyse lorsque l’entrée peut varier. Pour du texte JSON, utilisez json.loads(), car la syntaxe JSON et celle des littéraux Python se ressemblent sans être identiques. Traitez l’entrée comme des données : ne remplacez jamais ast.literal_eval() par eval() si le texte n’est pas entièrement maîtrisé.
Transformer ou filtrer des éléments avec une compréhension de liste
Une compréhension peut appliquer une condition ou une transformation pendant la création de la liste. L’exemple suivant ne conserve que les caractères numériques :
text = "P y 3"
digits = [char for char in text if char.isdigit()]
print(digits)
Vous pouvez aussi transformer les caractères conservés, par exemple avec [char.lower() for char in text if char.isalpha()]. Une compréhension parcourt les caractères de la chaîne. Si vous voulez traiter des mots, appelez d’abord split(), puis appliquez la compréhension à la liste de mots obtenue.
Choisir la bonne méthode
- Utilisez
list(text)lorsque chaque caractère doit devenir un élément. - Utilisez
text.split()pour des mots séparés par des caractères blancs, outext.split(separator)pour des champs simples séparés de façon uniforme. - Utilisez
ast.literal_eval()uniquement si l’entrée est censée contenir des littéraux Python ; vérifiez le type obtenu et gérez les textes mal formés. - Utilisez
json.loads()pour le JSON et le module Pythoncsvpour les champs CSV entre guillemets. - Utilisez une compréhension lorsque les éléments doivent aussi être filtrés ou transformés.
Avant la conversion, déterminez les garanties offertes par le format d’entrée. À l’endroit où le texte externe entre dans votre programme, vérifiez le type obtenu et la présence des champs requis, puis signalez les données mal formées d’une manière que le code appelant peut gérer.