1. Pourquoi avons-nous besoin de listes?
Il peut arriver que vous deviez lire, stocker, traiter et enfin imprimer des dizaines, voire des centaines ou des milliers de valeurs de données. Avez-nous donc besoin de créer une variable distincte pour chaque valeur? Devrez-nous passer de longues heures à écrire des déclarations comme celle ci-dessous ?
var1 = int(input())
var2 = int(input())
var3 = int(input())
var4 = int(input())
var5 = int(input())
var6 = int(input())
Jusqu’à présent, vous avez appris à déclarer des variables capables de stocker exactement une valeur donnée à la fois. Ces variables sont parfois appelées scalaires par analogie avec les mathématiques.
Nous allons voir ici comment déclarer des variables à valeurs multiples : les listes. Nous allons pour illustrer cela écrire un programme qui trie une suite de nombres.
2. Déclaration
La déclaration d’une liste se fait de la même manière que pour n’importe quelle variable. On lui donne un nom et on l’affecte d’une collection de valeurs entre crochet et séparées par des virgules :
Soit une variable appelée
de type numbers
`list
`et remplie d’une liste composée de 5 valeurs :
>>> numbers = [10, 5, 7, 2, 1]
>>> type(numbers)
<class 'list'>
|
3. Liste indexée
Les éléments d’une liste sont identifiés par leur indice :
>>> numbers = [10, 5, 7, 2, 1]
>>> numbers[0]
10
>>> numbers[3]
2
Si on tente d’accéder à un élément au dela du dernier indice, on génère une exeption :
|
Pour assigner une nouvelle valeur à un élément de la liste, il suffit de lui affecter la nouvelle valeur :
>>> numbers = [10, 5, 7, 2, 1]
>>> numbers[0] = 111
>>> numbers[0]
111
>>> numbers
[111, 5, 7, 2, 1]
Pour copier un élément dans un autre :
>>> numbers = [10, 5, 7, 2, 1]
>>> numbers[1] = numbers[4]
numbers[1]
1
>>> numbers
[111, 1, 7, 2, 1]
La valeur entre crochets qui sélectionne un élément de la liste est appelée un index ou indice. |
3.1. Travail à faire : Liste de caractères
-
Créer une liste appelée
qui contient les lettres de l’alphabet. Attention, les éléments de la liste sont des caractères !alphabet
-
Faire un programme qui permet d’écrire votre prénom en utilisant les éléments de la liste
.alphabet
alphabet = ['a', 'b', ....]
print(alphabet[12],alphabet[0],alphabet[17],alphabet[2], sep='')
4. Longueur d’une liste
La longueur d’une liste peut varier pendant l’exécution. De nouveaux éléments peuvent être ajoutés à la liste, tandis que d’autres peuvent en être supprimés. Cela signifie que la liste est une entité très dynamique.
Pour connaitre la longueur actuelle de la liste, on utilise une fonction nommée
(son nom provient de longueur en anglais).len()
La fonction prend le nom de la liste en tant qu’argument et renvoie le nombre d’éléments actuellement stockés dans la liste (autrement dit, la longueur de la liste).
4.1. Travail à faire : Longueur d’une liste
-
Vérifier la longueur de la liste
.alphabet
-
Créer une nouvelle liste appelée
qui contient les éléments de la listeprenom
`alphabet
`nécessaires pour écrire votre prénom :
alphabet = ['a', 'b', ....]
prenom =[alphabet[12],alphabet[0],alphabet[17],alphabet[2]]
5. Supprimer des éléments d’une liste
N’importe quel élément de la liste peut être supprimé à tout moment. Ceci se fait avec une instruction nommée del (delete).
Le mot réservé |
Pour supprimer un élément de la liste, il faut le désigner par son indice. Il disparaîtra de la liste et sa longueur sera réduite de 1.
>>> numbers = [10, 5, 7, 2, 1]
>>> len(numbers)
5
>>> del numbers[1]
>>> numbers
[10, 7, 2, 1]
>>> len(numbers)
4
6. Les indices négatifs sont légaux
Cela peut paraître étrange, mais les indices négatifs sont légaux et peuvent être très utiles.
Un élément d’indice égal à -1 est le dernier de la liste. |
6.1. Travail à faire : Accéder aux derniers éléments d’une liste
-
Afficher le dernier et l’avant-dernier élément de la liste
.alphabet
-
Supprimer l’avant dernier élément de cette liste.
-
Afficher maintenant le dernier et l’avant-dernier élément de la liste modifiée.
7. Ajouter un élément à une liste
-
Un nouvel élément peut être collé à la fin de la liste existante :
list.append(value)
L’ajout en fin de liste est effectuée par une méthode nommée Elle prend la valeur de son argument et le place à la fin de la liste à laquelle appartient la méthode. La longueur de la liste augmente alors de 1. |
-
La méthode
permet d’ajouter un nouvel élément à n’importe quel endroit de la liste, pas seulement à la fin.insert ()
list.insert(location, value)
La méthode
|
7.1. Travail à faire : Ajouter des éléments à une liste
-
Créer une liste appelée
qui contient les valeur numériquesnumbers
.111, 7, 2, 1
-
Ajouter à la fin de la liste la valeur
.4
-
Insérer en tout début de liste la valeur
.222
-
Insérer à l’indice 1 la valeur
333
-
Afficher maintenant la liste modifiée et sa longueur.
8. Remplir une liste avec des valeurs continues
Lorsque les valeurs d’une listes sont continues (comme l’alphabet par exemple ou une suite logique de nombres), on peut commencer par créer une liste vide pour la remplir en utilisant les méthodes
ou append()
dans une boucle :insert()
myList = [] # creating an empty list
for i in range(5):
myList.append(i)
print(myList)
8.1. Travail à faire : Créer une liste continue
-
Créer une liste vide appelée
.myList
-
Ajouter par la méthode de votre choix les éléments :
.10, 9, 8, …, 0
-
Afficher la liste remplie et sa longueur.
9. Parcourir une liste
9.1. Parcourir les indices
La première solution consiste à parcourir les indices de la liste au moyen d’une boucle
, dont l’indice va de 0 à la longueur de la liste, pour accéder à chaqu’une de ses valeurs. Dans l’exemple qui suit, on souhaite calculer la somme de tous les éléments d’une liste. On les ajoute donc tous un par un :for
myList = [10, 1, 8, 3, 5]
total = 0
for i in range(len(myList)):
total += myList[i]
print(total)
9.2. Parcourir les valeurs
Mais la boucle
peut faire beaucoup mieux. C’est la deuxième solution pour parcourir une liste : dans cette solution, on masque toutes les actions liées à l’indexation de la liste et fournit tous les éléments de la liste de manière très pratique.for
myList = [10, 1, 8, 3, 5]
total = 0
for value in myList:
total += value
print(total)
10. Echanger des valeurs dans une liste
Imaginons que nous devions réorganiser les éléments d’une liste, c’est-à-dire inverser l’ordre des éléments: les premier et cinquième, ainsi que les deuxième et quatrième éléments doivent être permutés. Le troisième resterait intact.
Question: comment pouvez-vous échanger ces valeurs ?
Si on se contente du code suivant, on perd la valeur à la position afféctée :
myList = [10, 1, 8, 3, 5]
myList[0] = myList[4]
myList[4] = myList[0]
print(myList)
Les deux valeurs en position 0 et 4 sont maintenant identiques. Ce n’est pas ce que nous voulions. Pour effectuer la permutation, il nous faut une variable intermédiaire :
myList = [10, 1, 8, 3, 5]
auxilary = myList[0]
myList[0] = myList[4]
myList[4] = auxilary
print(myList)
python offre un moyen encore plus pratique d’effectuer cet échange :
myList = [10, 1, 8, 3, 5]
myList[0], myList[4] = myList[4], myList[0]
print(myList)
10.1. Travail à faire : Permuter les valeurs d’une liste
-
Créer une liste vide appelée
.myList
-
Ajouter par la méthode de votre choix les éléments :
.0, 1, 2, …, 99, 100
-
Afficher la liste remplie et sa longueur.
-
Permuter les éléments : le premier avec le dernier, le second avec l’avant dernier, ….
-
Afficher la liste modifiée qui devrait maintenant être
100, 99, …, 2, 1, 0
Astuce :
Le problème consiste à échanger des éléments de la moitié inférieure de la liste avec des éléments de la moitié supérieure de la liste. On doit donc parcourir seulement la moitié de la liste, soit de l’indice |
11. Point clés à retenir
Une liste est un type de données
En Python, une liste est un type de données utilisé pour stocker plusieurs objets. Il s’agit d’une collection ordonnée et modifiable (mutable) d’articles séparés par des virgules entre crochets, par exemple :
|
Accéder aux éléments et mettre à jour
Les listes peuvent être indexées et mises à jour, par exemple :
|
Imbrication de listes
Les listes peuvent être imbriquées, par exemple :
|
Suppression d’éléments
Les éléments de liste et les listes peuvent être supprimés, par exemple :
|
Itération d’une boucle
|
Longueur d’une liste
La fonction
|
Fonctions et méthodes
Un appel de fonction ressemble à ceci :
un appel de méthode ressemble à ceci :
|
Execices autocorrigés
-
Quelle est la sortie de cet extrait de code :
lst = [1, 2, 3, 4, 5]
lst2 = []
add = 0
for number in lst:
add += number
lst2.append(add)
print(lst2)
-
Quelle est la sortie de cet extrait de code :
lst = []
del lst
print(lst)
-
Quelle est la sortie de cet extrait de code :
lst = [1, [2, 3], 4]
print(len(lst))
-
Quelle est la sortie de cet extrait de code :
lst = [1, [2, 3], 4]
print(lst[1])
12. Exploitation des listes
Sur votre dépôt github, créez un nouveau repository
: listes_python
. Vous y sauvegarderez vos travaux :
-
max.py
: Recherche du plus grand élément d’une liste -
min.py
: Recherche du plus petit élément d’une liste -
selection.py
: tri par sélection d’une liste -
insertion.py
: tri par insertion d’une liste
12.1. Travail à faire : Recherche du plus grand élément d’une liste
Nous allons ici rechercher dans une liste numérique le plus grand élément qu’elle contient.
-
Créer et afficher une liste aléatoire de 20 nombres compris entre 0 et 20 :
On obtient un nombre aléatoire compris entre deux borne en utilisant la méthode
|
-
Ecrire un programme qui recherche dans cette liste l’élément le plus grand.
-
Ecrire une fonction
maximum(liste)
qui prend une liste en paramètre et retourne sa plus grande valeur.
NE PAS UTILISER LA FONCTION max() DES LISTES ! Le principe consiste à créer une variable Si la valeur de la liste comparée est supérieure à la valeur courante de la variable |
12.2. Travail à faire : Recherche du plus petit élément d’une liste
-
Même exercice mais on recherche cette fois le plus petit élément d’une liste de 20 nombres aléatoires.
-
Ecrire une fonction
minimum(liste)
qui prend une liste en paramètre et retourne sa plus petite valeur.
13. Trier une liste
Plusieurs solutions existent pour trier une liste. Les algoritmes les plus connus sont :
-
Le tri par sélection
-
Le tri par insertion
source : Dépot github Nathan Gaberel, d’après l’applet Java réalisée par David Eck, adaptée en français par Tahia Benhaj-Abdellatif |
13.1. Tri par sélection
Le principe du tri par sélection/échange (ou tri par extraction) est d’aller chercher le plus petit élément du vecteur (partie de la liste) pour le mettre en premier, puis de repartir du second élément et d’aller chercher le plus petit élément du vecteur pour le mettre en second, etc…
Par exemple, considérons la liste suivante : [5, 9, 3, 6, 4, 8]
-
mini =
3
⇒ échange3
avec le premier élément de la liste et on recommence sur la liste[9, 5, 6, 4, 8]
-
mini =
4
⇒ échange4
avec le premier élément de la liste et on recommence sur la liste[5, 6, 9, 8]
-
mini =
5
⇒ échange5
avec le premier élément de la liste et on recommence sur la liste[6, 9, 8]
-
mini =
6
⇒ échange6
avec le premier élément de la liste et on recommence sur la liste[9, 8]
-
mini =
8
⇒ échange8
avec le premier élément de la liste et on recommence sur la liste[9]
-
Plus d’éléments à comparer, le tableau est trié.
13.2. Travail à faire : Programme de tri par sélection
-
Ecrire un programme qui tri par sélection une liste de 20 nombres aléatoire. On pourra mettre à profit l’utilisation de la fonction
minimum(liste)
13.3. Tri par insertion
C’est le tri du joueur de cartes. On fait comme si les éléments à trier étaient donnés un par un, le premier élément constituant, à lui tout seul, une liste triée de longueur 1. On range ensuite le second élément pour constituer une liste triée de longueur 2, puis on range le troisième élément pour avoir une liste triée de longueur 3 et ainsi de suite…
Le principe du tri par insertion est donc d’insérer à la nième itération le nième élément à la bonne place.
Par exemple, considérons la liste suivante : [5, 1, 7, 2, 6, 4, 3]
-
On considère le premier élément trié :
[5]
et reste à trier[1, 7, 2, 6, 4, 3]
-
1
est plus petit que5
, on le range à sa place :[1, 5]
et reste à trier[7, 2, 6, 4, 3]
-
7
est plus petit que …aucun, on le range à sa place :[1, 5, 7]
et reste à trier[2, 6, 4, 3]
-
2
est plus petit que7
,6
,5
, on le range à sa place :[1, 2, 5, 7]
et reste à trier[6, 4, 3]
-
6
est plus petit que7
, on le range à sa place :[1, 2, 5, 6, 7]
et reste à trier[4, 3]
-
4
est plus petit que7
,6
,5
, on le range à sa place :[1, 2, 4, 5, 6, 7]
et reste à trier[3]
-
3
est plus petit que7
,6
,5
,4
on le range à sa place :[1, 2, 3, 4, 5, 6, 7]
-
Plus d’éléments à trier, le tableau est trié.
13.4. Travail à faire : Programme de tri par insertion
-
Ecrire un programme qui tri par sélection une liste de 20 nombres aléatoire.