Une liste est un ensemble ordonné d'objets. On parle de structure de données de type séquence car chaque élément est accessible via son index.
La liste peut être vue comme une généralisation des chaînes de caractères : là où la chaîne est une séquence de caractères, la liste peut contenir des valeurs de tous types : n’importe quelle valeur peut être contenue dans une liste.
a_list = ['salut', 42, True, 1.5]
Pour déclarer une nouvelle liste vide:
>>> ma_liste = [] >>> # alternative >>> ma_liste2 = list()
Comme pour les chaînes de caractères, la fonction len()
permet de retourner le nombre d'éléments de la séquence :
>>> persons = [ ... 'Alice', ... 'Bob', ... 'Alex', ... 'Xavier', ... ] >>> len(persons) 4
>>> # tab est une liste de deux éléments de type str >>> tab = ['toto', 'tata'] >>> # le slicing sélectionnant toute une liste permet de copier la totalité de la liste >>> # pour en créer une nouvelle >>> tab2 = tab[:] >>> # tab et tab2 ne sont pas les mêmes objets >>> id(tab) 139710509285104 >>> id(tab2) 139710502183928 >>> tab is tab2 False >>> tab == tab2 True >>> # Inverser les éléments de tab2 >>> tab2.reverse() >>> print(tab2) ['tata', 'toto'] >>> # les listes sont des ensembles ordonnés >>> tab == tab2 False
Pour afficher la documentation intégrée
>>> help(ma_liste)
Pour vérifier si une valeur est un élément de la liste:
>>> fruits = ['pomme', 'poire', 'cerise'] >>> if 'pomme' in liste: ... print('la pomme est présente dans la liste des fruits')
Par défaut la boucle for itère sur les éléments de la liste, pas sur les index:
>>> fruits = ['pomme', 'poire', 'cerise'] >>> for i in fruits: ... print(i) pomme poire cerise
Pour travailler avec les index et les valeurs, utiliser la méthode enumerate() sur la liste:
>>> for index, value in enumerate(fruits): ... print(index,'= ',value)
>>> for index in rage(len(ma_liste)): ... print(ma_liste[index])
La méthode zip permet d'utiliser la boucle for avec deux listes en parallèle:
>>> fruits = ['pomme', 'poire', 'cerise'] >>> couverts = ['fourchette','couteau','cuillere'] >>> for i,j in zip(couverts,fruits): ... print(i,j) ... fourchette pomme couteau poire cuillere cerise
La suppression d'éléments dans une liste peut poser problème car l'index définit au départ dans la boucle for est modifié. La solution consiste à itérer en ordre inverse.
>>> for index in reversed(range(len(file_list))): ... if os.path.exists(file_list[index]) == False: ... file_list.pop(index)
Dasn l'exemple ci-dessus, l'élément est supprimé de la liste s'il ne correspond pas à un chemin valide vers un fichier ou un dossier.
Les listes sont largement utilisées en Python. Ce sont des objets extrêmement flexibles pouvant référencer n'importe quel type d'objet. Pour appliquer des traitements sur les éléments de la liste, une façon classique de faire consiste à utiliser une boucle for.
Python a inventé une nouvelle forme d'expression (notation) désignée compréhension de liste qui rend plus naturelle et intuitive d'appliquer une opération a chaque élément de la liste (ou de la séquence) et éventuellement d'ajouter une condition de filtre.
Un cas banal: une liste “numbers” contient des données et nous souhaitons calculer le logarithme de ces valeurs. Pour cela on crée une nouvelle liste vide “results” et pour chaque valeurs de numbers on calcule son logarithme et on l'ajoute dans la liste results:
from math import log as lg numbers = [10, 12, 33, 1] for i in numbers: results.append(lg(i))
Ce traitement est extrêmement courant en python: appliquer un traitement à tous les éléments d'une liste et regrouper les résultats dans un nouvel objet liste.
La compréhension répond à ce même besoin de façon bien plus intuitive, en se rapprochant davantage du langage naturel:
from math import log as lg numbers = [10, 12, 33, 1] results = [lg(x) for x in numbers]
Ici results référence une nouvelle liste dont les éléments vaudront lg(x) pour tout x de la séquence numbers. Cette expression sur une ligne est bien plus concise et proche du langage naturel.
La compréhension de liste peut également contenir une condition de test:
from math import log as lg numbers = [10, 12, 33, 1, -4] results = [lg(x) for x in numbers if x > 0]
Ici results référencera une nouvelle liste dont chaque élément vaudra lg(x) pour tout x de la séquence numbers si x est supérieur à 0.