[Python] : un mot sur les listes ? boucles for…

Print Friendly, PDF & Email

Les listes en python permettent de laisser place à toute votre imagination. De nombreuses astuces permettent d’alimenter une liste ou encore de la parcourir avec les slices, les ranges ou autres.

Je n’ai pas le niveau pour prétendre faire le tour de la question mais j’ai envie de partager mon expérience à ce sujet. En effet, un peu d’expérience dans ce domaine permet de gagner du temps, de simplifier son code et tout simplement de progresser.

Création d’une liste le plus simplement du monde

Définir et alimenter une liste en premier lieu c’est :

>>> liste=['B','o','n','j','o','u','r']

Ensuite lorsque l’on débute on réalise ce genre d’opération :

>>> texte="Bonjour Xavki"
>>> liste=[]
>>> for i in texte:liste.append(i)
>>> print(liste)
['B', 'o', 'n', 'j', 'o', 'u', 'r', ' ', 'X', 'a', 'v', 'k', 'i']

Avec la fonction append, on a ajouté chaque caractère à la liste. En outre, la variable texte fait aussi office de liste et est utilisable comme telle.

Liste  créée et définie en une ligne avec for intégré

>>> print(texte)
Bonjour Xavki
>>> a = [i for i in texte]
>>> print(a)
['B', 'o', 'n', 'j', 'o', 'u', 'r', ' ', 'X', 'a', 'v', 'k', 'i']

Là c’est déjà plus sympa.

Et puis on peut aller plus loin si nécessaire et y placer des conditions avec “if”.

>>> a = [i for i in texte if i == "o"]
>>> print(a)
['o', 'o']

Faire d’une liste de liste… une unique liste

Ce cas se présente souvent, vous avez une liste de liste et vous souhaitez n’en faire qu’une simple liste. Faire cette opération peut se révéler un peu fastidieux car il faut faire deux boucle for et ajouter les éléments avec un append dans notre  liste finale.

Découvrez  [Python] : quelques minutes avec Tkinter (GUI)

Bref voici comment se simplifier la vie et mieux comprendre ce principe d’alimentation des listes. Et avec ça vous aller devenir de vraies oneliners (la frime lol).

>>> texte = [['B','o','n'], ['j','o','u','r']]
>>> print(texte)
[['B', 'o', 'n'], ['j', 'o', 'u', 'r']]
>>> liste=[txt for tmp in texte for txt in tmp]
>>> print(liste)
['B', 'o', 'n', 'j', 'o', 'u', 'r']

Vous me direz cela n’empêche pas de faire deux boucles mais tout cela prend peu de lignes.

Et donc si vous avez compris les “for” empilés voici la même chose avec un niveau supplémentaire.

>>> texte = [['B','o','n'], ['j','o','u','r'],[' ',['X','a','v','k','i']]]
>>> liste=[i for tmp in texte for txt in tmp for i in txt]
>>> print(liste)
['B', 'o', 'n', 'j', 'o', 'u', 'r', ' ', 'X', 'a', 'v', 'k', 'i']