Listes en Python
BTS SRI 1
M. MOSLEH
Méthodes liste (python)
Méthode Syntaxe Exemple
append() [Link](x) l = [1,2] → [Link](3)
extend() [Link](iterable) [Link]([4,5])
insert() [Link](i, x) [Link](1, 10)
remove() [Link](x) [Link](2)
pop() [Link]() / [Link](i) [Link]() / [Link](0)
clear() [Link]() [Link]()
index() [Link](x) [Link](10)
count() [Link](x) [Link](1)
sort() [Link]() [Link]()
sort(reverse=True) [Link](reverse=True) [Link](reverse=True)
reverse() [Link]() [Link]()
copy() [Link]() c = [Link]()
Fonctions (non-listes) utilisées avec les listes
Fonction Syntaxe Rôle Exemple
len() len(liste) Longueur de la liste len([1,2,3])
sum() sum(liste) Somme des éléments sum([1,2,3])
max() max(liste) Valeur maximale max([1,5,2])
min() min(liste) Valeur minimale min([1,5,2])
sorted() sorted(liste) Trie sans modifier sorted([3,1,2])
enumerate() enumerate(liste) Index + valeur list(enumerate(['a','b']))
zip() zip(l1, l2) Regroupe éléments list(zip([1,2],[3,4]))
any() any(liste) True si ≥1 True any([0,1,0])
all() all(liste) True si tous True all([1,2,3])
map() map(func, liste) Applique fonction list(map(abs, [-1,2]))
filter() filter(func, liste) Filtre éléments list(filter(lambda x:x>0, l))
list() list(iterable) Conversion en liste list("abc")
Méthode zip():
La fonction zip() de Python permet d'itérer sur plusieurs listes en parallèle :
>>> animaux = ["poulain", "renard", "python"]
>>> couleurs = ["alezan", "roux", "vert"]
>>> zip(animaux, couleurs)
<zip object at 0x7f6cf954a480>
>>> type(zip(animaux, couleurs))
<class 'zip'>
>>> for element in zip(animaux, couleurs):
... print(element)
... Remarque
('poulain', 'alezan') La fonction zip() fonctionne sur n'importe
quel objet itérable : listes, tuples,
('renard', 'roux')
dictionnaires, objets range, etc.
('python', 'vert')
Copie de listes
Il est très important de savoir que l'affectation d'une liste (à partir d'une
liste préexistante) crée en réalité une référence et non une copie :
>>> liste1 = [1, 2, 3]
>>> liste2 = liste1
>>> liste2
[1, 2, 3]
>>> liste1[1] = -15
>>> liste1
[1, -15, 3]
>>> liste2
[1, -15, 3]
Solution :
Pour éviter ce problème, il va falloir créer une copie explicite de la
liste initiale. Observez cet exemple :
>>> liste1 = [1, 2, 3]
>>> liste2 = liste1[:]
>>> liste1[1] = -15
>>> liste2
[1, 2, 3]
Attention !!
les deux astuces précédentes ne fonctionnent que pour les listes à une
dimension, autrement dit les listes qui ne contiennent pas elles-
mêmes d'autres listes. Voyez par exemple :
>>> liste1 = [[1, 2], [3, 4]]
>>> liste1
[[1, 2], [3, 4]]
>>> liste2 = liste1[:]
>>> liste1[1][1] = 55
>>> liste1
[[1, 2], [3, 55]]
>>> liste2
[[1, 2], [3, 55]]
Et
>>> liste2 = list(liste1)
>>> liste1[1][1] = 77
>>> liste1
[[1, 2], [3, 77]]
>>> liste2
[[1, 2], [3, 77]]
Solution :
La méthode de copie qui fonctionne à tous les coups consiste à appeler la
fonction deepcopy() du module copy :
>>> import copy
>>> liste1 = [[1, 2], [3, 4]]
>>> liste1
[[1, 2], [3, 4]]
>>> liste2 = [Link](liste1)
>>> liste1[1][1] = 99
>>> liste1
[[1, 2], [3, 99]]
>>> liste2
[[1, 2], [3, 4]]
Initialisation d'une liste de listes
Imaginons que l'on souhaite représenter un tableau de nombre et
l'initialiser avec des 0. Nous pourrions être tentés d'utiliser la
duplication de listes :
>>> liste1 = [[0, 0, 0]] * 5
>>> liste1
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0,
0, 0]]
Problème:
Le problème est que si on modifie un élément d'une des sous-
listes :
>>> liste1[2][0] = -12
>>> liste1
[[-12, 0, 0], [-12, 0, 0], [-12, 0, 0], [-12, 0,
0], [-12, 0, 0]
Solution :
Pour éviter le problème, on peut utiliser une boucle :
>>> liste1 = []
>>> for i in range(5):
... [Link]([0, 0, 0])
...
>>> liste1
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0,
0]]
>>> liste1[2][0] = -12
>>> liste1
[[0, 0, 0], [0, 0, 0], [-12, 0, 0], [0, 0, 0], [0,
0, 0]]
Attention
Même si une liste de listes peut représenter un tableau de
nombres, il ne faut pas la voir comme un objet mathématique
de type matrice. En effet, le concept de lignes et colonnes n'est
pas défini clairement, on ne peut pas faire d'opérations
matricielles simplement, etc. On verra dans le chapitre
20 Module Numpy qu'il existe des objets appelés arrays qui sont
faits pour ça.
Liste de compréhension
En Python, la notion de liste de compréhension (ou
compréhension de listes) représente une manière originale et
très puissante de générer des listes. La syntaxe de base
consiste au moins en une boucle for au sein de crochets
précédés d'une variable (qui peut être la variable d'itération ou
pas) :
>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [2 for i in range(10)]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
Initialisation d'une liste de listes
Une liste de compréhension permet l'initialisation d'une liste de listes en
une ligne sans avoir l'inconvénient de faire une référence vers la même
sous-liste (voir rubrique précédente) :
>>> liste1 = [[0, 0, 0] for i in range(5)]
>>> liste1
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> liste1[2][0] = -12
>>> liste1
[[0, 0, 0], [0, 0, 0], [-12, 0, 0], [0, 0, 0], [0, 0, 0]]
Nombres pairs compris entre 0 et 30¶
>>> print([i for i in range(31) if i % 2 == 0])
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,
26, 28, 30]
Remarque :
Méthode /
Syntaxe Rôle Exemple
Fonction
Affiche la
help() help(obj) help(list)
documentation
Liste les attributs et
dir() dir(obj) dir(str)
méthodes