6 - Listes
6 - Listes
Chapitre 6 : Listes
2 Listes et opérateurs
6 Listes et chaînes
7 Objets et valeurs
8 Matrices
10 Glossaire
Création de listes
Remarques :
une liste peut être vide
une liste peut contenir des valeurs de types différents
une liste peut contenir des listes, des tuples, ou n’importe quelle
autre type de valeur
la fonction len peut être appliquée sur une liste
>>> empty = []
>>> type(empty)
<class ’list’>
>>> data = [’text’, 2.0, 1, [2, 3]]
>>> print (data)
[’text’, 2.0, 1, [2, 3]]
>>> len(data)
4
On peut accéder aux éléments d’une liste grâce à l’opérateur [.]. Les
indices fonctionnent de la même manière que pour les chaînes de
caractères.
>>> data = [’text’, 2.0, 1, [2, 3]]
>>> print ( data[0] )
text
>>> print ( data[-1] )
[2, 3]
On peut représenter les listes par un diagramme d’état qui illustre les
relations entre les indices et les éléments.
>>> empty = []
>>> numbers = [1, 3, 6]
empty
numbers 0 1
1 3
2 6
data
0 ’text’
1 2.0
2 1
3
0 2
1 3
numbers 0 1
12
1 3
2 6
Boucles for
Une liste est une séquence : peut être utilisée dans une boucle for.
data = [’text’, 2.0, 1, [2, 3]]
Boucles for
Une boucle for sur une liste vide n’exécute jamais son corps.
for x in []:
print (’This never happens.’)
Listes et opérateurs
Listes et opérateurs
Opérateur in
Tranches de listes
L’opérateur [:] fonctionne aussi sur les listes. Il peut être utilisé dans
le membre gauche d’une assignation.
>>> t = list(range(10))
>>> print (t)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> t[1:3]
[1, 2]
>>> t[:4]
[0, 1, 2, 3]
>>> t[3:]
[3, 4, 5, 6, 7, 8, 9]
>>> t[1:3] = [34,26]
>>> print (t)
[0, 34, 26, 3, 4, 5, 6, 7, 8, 9]
Comme les listes sont mutables, il est parfois utile de faire une copie
avant de les modifier. On peut créer une copie avec une “tranche
complète”.
>>> copy = t[:]
>>> t[4:6] = [0] * 2
>>> print (t, copy)
[0, 34, 26, 3, 0, 0, 6, 7, 8, 9] [0, 34, 26, 3, 4, 5, 6, 7, 8, 9]
Exercice
Problème
Construire la liste suivante :
Exercice
Problème
Construire la liste suivante :
append(...)
L.append(object) -- append object to end
extend(...)
L.extend(iterable) -- extend list by appending elements from the iterable
count(...)
L.count(value) -> integer -- return number of occurrences of value
index(...)
L.index(value, [start, [stop]]) -> integer -- return first index of value.
Raises ValueError if the value is not present.
La méthode sort trie les éléments d’une liste. Tous ses arguments
sont optionnels : reverse permet de trier par ordre décroissant, les
deux autres arguments seront détaillés plus tard.
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
insert(...)
L.insert(index, object) -- insert object before index
remove(...)
L.remove(value) -- remove first occurrence of value.
Raises ValueError if the value is not present.
pop(...)
L.pop([index]) -> item -- remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
Exercice
Problème
Ecrire un script qui demande à l’utilisateur le nom d’un fichier de texte
(.txt), puis affiche les mots contenus dans le fichier par ordre
alphabétique (grâce à une liste). Un même mot ne peut pas être
affiché deux fois. Tous les caractères qui ne sont pas des lettres ou
des chiffres seront supprimés dans la création de la liste de mots.
Hints :
la méthode isalnum invoquée sur une chaîne retourne vrai ssi
tous les caractères de la chaîne sont des lettres ou des chiffres.
la méthode split invoquée sur une chaîne retourne une liste des
“mots” de la chaîne (c-à-d les sous-chaînes séparées par des
caractères blancs1 ). On peut spécifier d’autres séparateurs que
des blancs avec le paramètre optionnel sep.
1
Espaces, retours à la ligne, tabulations, etc.
Informatique (Chap. 6) Listes 30 / 74
Méthodes sur les listes
Exercice
>>> help(str.split)
Help on method_descriptor:
split(...)
S.split([sep [,maxsplit]]) -> list of strings
Exercice
>>> keepAlnum(’he23.?56th’)
’he2356th’
Exercice
Solution :
filename = input(’Nom du fichier: ’)
file = open(filename)
wordsList = []
for line in file:
for word in line.split():
cleanWord = keepAlnum(word)
if not cleanWord in wordsList:
wordsList.append(cleanWord)
wordsList.sort()
print (wordsList)
Arguments de la ligne de
commande
Exemples :
la commande cd myDir vous permet de changer de répertoire
dans une console. Le nom du répertoire (myDir) est un argument
de la commande cd.
la commande python myscript.py vous permet d’interpréter le
script myscript.py. Le nom du script est un argument de la
commande python qui lance l’interpréteur.
Fichier args.py :
import sys
print (sys.argv)
2
Pour passer un argument qui contient des espaces, on peut le mettre entre
apostrophes.
Informatique (Chap. 6) Listes 36 / 74
Arguments de la ligne de commande
filename = ’’
if len(sys.argv) < 2:
filename = input(’Nom du fichier: ’)
else:
filename = sys.argv[1]
file = open(filename)
...
>>> t = range(1,11)
>>> add_all(t)
55
Remarques :
total += x est équivalent à total = total + x
une variable comme total qui accumule progressivement la
somme des éléments est appelée un accumulateur
3
On utilise la méthode capitalize sur chaque chaîne : elle met la première
lettre en majuscule.
Informatique (Chap. 6) Listes 41 / 74
Opérations fréquentes sur les listes
def capitalize_all(t):
res = []
for s in t:
res.append(s.capitalize())
return res
Problème
Ecrire une fonction qui prend une liste de nombre entiers en
paramètres et qui retourne la somme cumulative, c-à-d une nouvelle
liste telle que l’élément d’indice i soit la somme des i + 1 premiers
éléments.
Par exemple, la somme cumulative de [1, 2, 3] est [1, 3, 6].
Solution :
def cum_sum(t):
res = []
sum = 0
for x in t:
sum += x
res.append(sum)
return res
>>> cum_sum([1,2,3])
[1, 3, 6]
>>> cum_sum(range(10))
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
Listes et chaînes
Listes et chaînes
Un str est une séquence de caractères et une liste est une séquence
de valeurs, mais une liste de caractères n’est pas la même chose
qu’une chaîne.
Listes et chaînes
La fonction list sépare une chaîne en caractères individuellement.
Nous avons vu la méthode split qui permet de séparer une chaîne
en mots ou en sous-chaînes.
La méthode join fait le contraire de split. C’est une méthode sur les
chaînes : on l’invoque sur le délimiteur et on passe la liste en
paramètre.
>>> s = ’to be or not to be’
>>> t = s.split()
>>> print (t)
[’to’, ’be’, ’or’, ’not’, ’to’, ’be’]
>>> s = ’spam*spam*spam’
>>> delimiter = ’*’
>>> s.split(delimiter)
[’spam’, ’spam’, ’spam’]
>>> delimiter = ’ ’
>>> delimiter.join(t)
’to be or not to be’
>>> ’’.join(t)
’tobeornottobe’
Informatique (Chap. 6) Listes 48 / 74
Objets et valeurs
Objets et valeurs
Objets et valeurs
Il y a deux possibilités :
a ’banana’ a
’banana’
b ’banana’ b
Objets et valeurs
Donc, dans ce cas, Python crée un seul objet “chaîne” et les deux
variables réfère à cet objet.
a
’banana’
b
Objets et valeurs
Par contre, dans le cas de deux listes, deux objets sont créés.
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False
a [1, 2, 3]
b [1, 2, 3]
on dit que les deux listes sont equivalentes, car elles ont les
mêmes éléments, mais elles ne sont pas identiques, car elle ne
sont pas le même objet.
si deux objets sont identiques, ils sont aussi équivalents, mais le
contraire n’est pas toujours vrai.
Objets et valeurs
Jusqu’à présent, on a utilisé les mots “objet” et “valeur” de manière
interchangeable, mais il est plus précis de dire qu’un objet possède
une valeur et un type.
Si on exécute a = [1, 2, 3] :
la variable a réfère à un objet (de type liste),
la valeur de l’objet est une séquence particulière d’éléments,
si un autre objet “liste” a les mêmes éléments, on dira qu’il a la
même valeur,
on peut invoquer sur a toutes les méthodes définies pour les
objets de type “liste”.
Objets et valeurs
>>> a = ’banana’
>>> b = ’banana’
>>> c = [1, 2, 3]
>>> d = [1, 2, 3]
>>> a is b
True
>>> c is d
False
Si on modifie par après une des deux listes, l’autre n’est pas modifiée :
elles ont “pour le moment” la même valeur, mais elles peuvent évoluer
de manière indépendante, puisqu’elles sont des objets différents.
Alias
a
[1, 2, 3]
b
Alias
Modifier un objet qui est référé par plusieurs variables est visible
depuis l’ensemble de celles-ci.
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> c = b
>>> print (a, b, c)
[1, 2, 3] [1, 2, 3] [1, 2, 3]
>>> a is b, a is c, b is c
(False, False, True)
>>> a[0] = 4
>>> print (a, b, c)
[4, 2, 3] [1, 2, 3] [1, 2, 3]
>>> b[0] = 5
>>> print (a, b, c)
[4, 2, 3] [5, 2, 3] [5, 2, 3]
__main__
letters
0 ’a’
1 ’b’
delete_head 2 ’c’
t
Matrices
Matrices
7 6 5
M = 1 8 3
2 4 9
En Python, une matrice peut être représentée par une liste de listes,
où chaque sous-liste est une ligne de la matrice
Matrices
7 6 5
M= 1
8 3
2 4 9
print(M[1][2]) → 3
Addition de matrices
4 2 7 7 −3 2 11 −1 9
1
3 2 + 9
4 −7 = 10
7 −5
6 9 7 4 11 2 10 20 9
−1 5 8 4 9 5 3 14 13
nb_lignes = len(A)
nb_colonnes = len(A[0])
C = [[0]*nb_colonnes]*nb_lignes
for i in range(nb_lignes):
for j in range(nb_colonnes):
C[i][j] = A[i][j] + B[i][j]
3 2 −2
3 7 9 1 7 6 5
A= 2 6 3 7 C = Transpose(A) =
9
3 8
−2 5 8 4
1 7 4
nb_lignes = len(A)
nb_colonnes = len(A[0])
C = [[0]*nb_lignes]*nb_colonnes
for i in range(nb_lignes):
for j in range(nb_colonnes):
C[j][i] = A[i][j]
Multiplication de matrices
4 7 9
2 9 1 3 145 2 76
12 −1 5
7 −2 6 4 × = 80 75 61
8 6 −2
−2 7 9 11 225 0 54
7 −3 5
nb_lignes_A = len(A)
nb_lignes_B = len(B)
nb_colonnes_B = len(B[0])
C = [[0]*nb_colonnes_B]*nb_lignes_A
for i in range(nb_lignes_A):
for j in range(nb_colonnes_B):
for k in range(nb_lignes_B):
C[i][j] += A[i][k] * B[k][j]
Matrices : numpy
import numpy
print(A[1][1])
C = A*2
D = A.transpose()
E = A + B
F = A.dot(B)
Exemple :
word = word.strip()
t = t.sort() # FAUX: t refere None !
Faire une copie quand c’est nécessaire : une méthode comme sort
modifie la liste sur laquelle elle est invoquée. Exemple de copie avant
modification :
orig = t[:]
t.sort()
Glossaire
Glossaire
élément : une des valeurs dans une liste (ou une autre séquence).
indice : valeur entière qui indique la position d’un élément dans une liste (ou une
séquence).
liste : séquence de valeurs qui peuvent être modifiées et mises entre crochets droits.
liste imbriquée : liste qui est un élément d’une autre liste.
accumulateur : variable utilisée dans une boucle pour additionner ou accumuler un
résultat.
object : quelque chose qu’une variable peut référer. Un objet possède un type et une
valeur. On peut lui appliquer des méthodes définies en fonction de son type.
référence : l’association entre une variable et sa valeur (c-à-d la valeur de son objet).
alias : assigner une variable depuis une autre, pour qu’elles réfèrent au même objet.
équivalent : ayant la même valeur.
identique : être le même objet (ce qui implique l’équivalence).