Outils pour utilisateurs

Outils du site


dev:python:core:listes

Les listes en python

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]

Déclaration d'une liste

Pour déclarer une nouvelle liste vide:

>>> ma_liste = []
 
>>> # alternative
>>> ma_liste2 = list()

Taille d'une liste

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

Quelques manipulations basiques

>>> # 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

Les méthodes

Pour afficher la documentation intégrée

>>> help(ma_liste)
  • sort() trie alphabétique ou numérique des éléments
  • append() ajouter un élément en fin de liste
  • reverse() inverser l'ordre des éléments
  • index() retourne l'index de l'élément passé en paramètre
  • remove() supprime la première occurrence de la valeur passée en paramètre.
  • pop() retire un élément de la liste.
  • extend() ajouter une liste à la liste courante (étendre la liste courante avec une autre liste).
  • count() détermine combien de fois un élément est présent dans la liste.

Présence d'un élément

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')

Parcourir la liste

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

Supprimer des éléments

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.

Compréhensions de listes

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.

La compréhension de liste permet d'appliquer n'importe quel traitement à n'importe quel type de séquence. L' usage des compréhensions de listes est fortement recommandé car il permet d'obtenir un code plus facile à lire et à maintenir.

Références

dev/python/core/listes.txt · Dernière modification : 2023/11/29 15:08 de yoann