Python et les listes

Les listes en Python sont des structures de données qui permettent de rassembler des “objets” (des nombres, des chaînes de caractères, et d’autres objets). Une liste est définie par des crochets ouvrant et fermant.

Les listes en Python
Python et les listes

Création d’une liste

Manuellement

On peut constituer une liste de nombres de la manière suivante :

L = [ 1 , 5 , 3 , 8 , 6 , 15 ]

Ici, on dit que la longueur de la liste est 6 car il y a six éléments dans la liste. De manière analogue, on peut constituer une liste de chaînes de caractères:

P = [ "Jean" , "Paul" , "Pierre" , "Lucie" , "Mathilde" , "Fanie" ]

La longueur de cette dernière liste est aussi égale à 6.

On peut constituer des listes “mixtes”, qui contiennent des éléments qui n’ont pas le même type :

M = [ "Jean" , 3 , True , "Jeanne" , 5 , False ]

La longueur de cette dernière liste est aussi égale à 6. Elle est composée d’éléments de type string (chaîne de caractères), int (entier) et bool (booléen).

La fonction range

Si l’on souhaite créer une liste d’entiers successifs, on peut utiliser la fonction range.

L = range(100)

L est ici une liste constituée des entiers de 0 à 99.

L = range(12,50)

L est ici une liste constituée des entiers allant de 12 à 49.

L = range(10,1000,10)

Ici, L est une liste des entiers de 10 à 990 par pas de 10 (c’est-à-dire 10, 20, 30, …, 980, 990).

Listes par compréhension en Python

Si on cherche à créer une liste dont les éléments sont régis par une loi mathématique précise, on peut créer la liste par compréhension. Par exemple, pour créer la liste des 10 premiers carrés parfaits:

L = [ i**2 for i in range(10) ]
L = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
L = [ i*j for i in range(1,11) for j in range(1,11) ]

Cette syntaxe est équivalente à la suivante:

L = [ ]
for i in range(1,11):
    for j in range(1,11):
        L.append( i*j )
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18,
20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 4, 8, 12, 16, 20, 24, 28, 
32, 36, 40, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 6, 12, 18, 24, 30,
36, 42, 48, 54, 60, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 8, 16, 24,
32, 40, 48, 56, 64, 72, 80, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 10,
20, 30, 40, 50, 60, 70, 80, 90, 100]

Si on souhaite construire la même liste sans les multiples de 5 par exemple, donc si on souhaite construire une liste avec condition(s), on pourra faire comme ceci:

L = [ i*j for i in range(1,11) for j in range(1,11) if i*j % 5 != 0]
[1, 2, 3, 4, 6, 7, 8, 9, 2, 4, 6, 8, 12, 14, 16, 18, 3, 6, 9, 12, 18,
21, 24, 27, 4, 8, 12, 16, 24, 28, 32, 36, 6, 12, 18, 24, 36, 42, 48,
54, 7, 14, 21, 28, 42, 49, 56, 63, 8, 16, 24, 32, 48, 56, 64, 72, 9,
18, 27, 36, 54, 63, 72, 81]

Opérations élémentaires sur les listes en Python

Insérer un item dans une liste

L = [ 'a' ]
L += ['b'] # première méthode. Donne L = ['a' , 'b']
L.append('c') # deuxième méthode. Donne : L = ['a' , 'b' , 'c']
L.insert(1,'d') # troisième méthode. Donne : L = ['a' , 'd' , 'b' , 'c']

L’avantage de la première méthode est que l’on peut insérer plusieurs items en même temps, contrairement à la deuxième.

L’avantage de la deuxième méthode (par rapport à la première) est au niveau de l’espace mémoire (moins conséquent que celui nécessaire pour la première méthode).

Quant à la troisième méthode, elle permet d’insérer un item à n’importe quelle position dans la liste.

Somme de deux listes en Python

Méthode “courte”

C’est peut-être bête, mais c’est bien pratique !

L = [ 'a' ]
P = [ 'b' ]
Q = L + P
Q = [ 'a' , 'b' ]

Méthode “extend”

L = [ 'a' ]
P = [ 'b' ]
L.extend(P)
L = [ 'a' , 'b' ]

C’est la méthode la plus économique en terme de mémoire.

Ordonner une liste en Python

Cela peut se faire avec la méthode sort().

L = [ i*j for i in range(1,11) for j in range(1,11) if i*j % 5 != 0]
L.sort()
print( L )
[1, 2, 2, 3, 3, 4, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 12,
12, 12, 12, 14, 14, 16, 16, 16, 18, 18, 18, 18, 21, 21, 24, 24, 24,
24, 27, 27, 28, 28, 32, 32, 36, 36, 36, 42, 42, 48, 48, 49, 54, 54,
56, 56, 63, 63, 64, 72, 72, 81]

Si l’on souhaite ordonner de façon décroissante, on fera:

L.sort(reverse = True)

Avec cette méthode, la liste est irrémédiablement modifiée. Si l”on ne souhaite pas agir directement sur la liste, on peut utiliser la fonction sorted():

L = [ i*j for i in range(1,11) for j in range(1,11) if i*j % 5 != 0 ]
P = sorted( L )
print( L , '\n' , P )
[1, 2, 3, 4, 6, 7, 8, 9, 2, 4, 6, 8, 12, 14, 16, 18, 3, 6, 9, 12, 18,
21, 24, 27, 4, 8, 12, 16, 24, 28, 32, 36, 6, 12, 18, 24, 36, 42, 48,
54, 7, 14, 21, 28, 42, 49, 56, 63, 8, 16, 24, 32, 48, 56, 64, 72, 9,
18, 27, 36, 54, 63, 72, 81]

[1, 2, 2, 3, 3, 4, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 12,
12, 12, 12, 14, 14, 16, 16, 16, 18, 18, 18, 18, 21, 21, 24, 24, 24,
24, 27, 27, 28, 28, 32, 32, 36, 36, 36, 42, 42, 48, 48, 49, 54, 54,
56, 56, 63, 63, 64, 72, 72, 81]

Chasser les doublons

L = [ i*j for i in range(1,11) for j in range(1,11) if i*j % 5 != 0 ]
Q = [ ]
for i in L:
    if i not in Q:
        Q += [ i ]
Q.sort()
print( Q )
[1, 2, 3, 4, 6, 7, 8, 9, 12, 14, 16, 18, 21, 24, 27, 28, 32, 36, 42,
48, 49, 54, 56, 63, 64, 72, 81]

Itérer sur deux listes en Python

M = [ 'Jean' , 'Dominique' , 'Mathilde' ]
P = [ 52 , 158 , 3 ]

for m, p in zip(M,P):
    print( '{:10} : {:003}'.format(m,p) )
Jean      : 052
Dominique : 158
Mathilde  : 003

Au passage, j’ai formaté les sorties de sorte que les prénoms soient affichés sur 10 caractères (afin que les “:” soient alignés) et les nombres sur 3 caractères (ça fait plus jolie je trouve).

Vider une liste

L = ['a' , 'b' , 'c']
L.clear() # première méthode
L = [ ] # seconde méthode

L’avantage de la première méthode est au niveau de l’espace mémoire alloué à la liste: il est vidé. La seconde méthode ne fait qu’allouer un autre espace mémoire vide à la liste tout en gardant l’espace mémoire alloué aux variables ‘a’, ‘b’ et ‘c’ (voir cet article).

Retirer un item

L = ['a','b','c']
L.remove('b')
L = [ 'a' , 'c' ]

Compter le nombre d’occurrences d’un item dans une liste

L = ['a' , 'b' , 'a']
L.count('a') # retourne : 2  car il y a 2 'a' dans L

Compter le nombre d’items d’une liste

L = ['a' , 'b' , 'c']
len(L) # retourne : 3 car il y a 3 items dans L

Connaître la position d’un item dans une liste

L = ['a' , 'b' , 'c']
L.index('c') # retourne : 2 (position de 'c' dans L)

Supprime le dernier élément d’une liste

L = ['a' , 'b' , 'c']
L.pop()

En mode console, retourne ‘c’ (le dernier item de L) tout en supprimant ‘c’ de la liste. Donc ici, L = [‘a’ , ‘b’].

Dans un programme, ne fait que retirer le dernier élément de la liste, sans afficher cet élément.

Autres méthodes

Il existe d’autres méthodes sur les listes, que vous pouvez consulter sur la page https://docs.python.org/3/tutorial/datastructures.html.

[Retour à la page principale]