❖ Les listes

♦ A la découverte des listes

Supposons qu'on veuille écrire un programme gérant une liste de courses à faire, on ne sait pas combien d'éléments sont présents dans cette liste de courses. Bien sûr, on pourrait écrire quelque chose comme :

In [1]:
# Une liste de courses ...
item1 = "oignons"
item2 = "huile"
item3 = "sel"
item4 = "chips"
item5 = "orange"

Cette solution n'est pas satisfaisante, en effet, si la liste contient plus de 5 items, il faudrait éditer le programme et y créer une variable item6. De façon générale, on aimerait :

  • ajouter facilement un élément à cette liste ?
  • en enlever un
  • savoir rapidement si un élément est présent ou non dans la liste ?
  • avoir le nombre d'éléments présents dans la liste, ...

Une solution bien plus intéressante est d'utiliser une liste de Python. Comme son nom l'indique, il s'agit d'une variable pouvant contenir plusieurs valeurs. Elle se note entre crochets (caractère [ et ]) et les valeurs qu'elle contient son séparés par des virgules.

In [2]:
courses=['oignons','huile','sel','chips','orange']

Nous venons de créer une variable de type list qui représente notre liste de courses. Cette représentation est bien plus efficace que la précédente car nous allons découvrir que l'accès, l'ajout, l'insertion, la suppression d'un élément de cette liste se fait facilement en Python

⚡ A retenir :
  • Une liste est une variable contenant plusieurs valeurs
  • Les valeurs sont séparées par des virgules
  • Pour créer une liste on utilise la syntaxe :
    la_liste = [valeur1 , valeur2, valeur3, ...]

✎ Exercices

  1. Créer une liste specialites contenant les noms de vos trois enseignements de spécialité
In [3]:
# Votre réponses ici
# Attention c'est un exemple. Vous devez mettre vos spécialités

specialites = ["maths", "nsi", "hggsp"]
In [4]:
specialites[2]
Out[4]:
'hggsp'
  1. Créer une liste temperatures contenant les valeurs numériques suivantes : 27, 18, 32, 29, 27, 27 et 28
In [5]:
# Votre réponse ici
temperatures = [27, 18, 32, 29, 27, 27, 28]

On a crée jusqu'ici, des listes de chaines de caractères et des listes de nombres, on peut tout à fait mélanger les deux, et les éléments d'une liste ne sont donc pas forcément du même type :

In [6]:
une_date = [5,"Mars",1953]

Sur cet exemple le premier et le dernier élément de la liste sont des entiers (int), mais l'élément du milieu est une chaine de caractère (str)

♦ Accéder aux valeurs d'une liste

Les valeurs stockées dans une liste sont numérotées à partir de 0 et on peut accéder aux valeurs par leur numéro en utilisant la syntaxe suivante :

<liste>[numero]

Reprenons l'exemple de notre liste de courses :

In [7]:
courses=['oignons','huile','sel','chips','orange']

Pour afficher le deuxième élément de la liste, on peut donc écrire :

In [8]:
courses[1]
Out[8]:
'huile'

La figure ci-dessous illustre le fonctionnement des listes de Python :

liste_courses.png

Retenez bien la syntaxe, on indique le nom de la liste puis l'indice de l'élément entre crochets

Attention cependant à ne pas dépasser le nombre d'éléments de la liste, sinon Python renverra une erreur :

In [9]:
courses[5]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-9-bb1da2a89c2a> in <module>
----> 1 courses[5]

IndexError: list index out of range

Notez bien le nom de l'erreur : IndexError pour savoir ce qu'elle signifie lorsque vous la rencontrerez.

On peut accéder aux éléments d'une liste à partir de la fin en utilisant des numéros négatifs :

  • ma_liste[-1] sera le dernier élement de ma_liste
  • ma_liste[-2] sera l'avant dernier
  • etc ...

Donc pour afficher le dernier élément de la liste de courses (c'est à dire Orange) :

In [10]:
courses[-1]
Out[10]:
'orange'
⚡ A retenir :
  • On peut accéder aux éléments d'une liste par leur numéro avec <liste>[numero]
  • Attention, la numérotation commence à 0. Le premier élément de ma_liste est donc ma_liste[0]
  • On peut accéder aux éléments à partir de la fin en utilisant des numéros négatifs.
  • Tenter d'accéder à un indice d'élément inexistant renvoie un IndexError.

✎ Exercices

  1. Afficher l'élément d'indice 3 de la liste de courses
In [11]:
# Votre réponse ici
courses[3]
Out[11]:
'chips'
  1. Créer la liste des sept jours de la semaine, en commençant par le lundi. On appelle cette liste semaine
In [12]:
# Votre réponse ici
semaine = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]
  1. Faire afficher de deux façons différentes le dernier jour de la liste semaine crée ci-dessus
In [13]:
# Votre réponse ici
print(semaine[6])
print(semaine[len(semaine) - 1])  # le dernier indice d'une liste est len(liste) - 1
print(semaine[-1])
Dimanche
Dimanche
Dimanche
  1. Compléter le code ci-dessous afin de récupérer dans jour, mois et annee les éléments correspondant de la liste une_date
In [14]:
une_date = [5,"Mars",1953]
jour = une_date[0]
mois = une_date[1]
annee = une_date[-1]
In [15]:
print(jour, mois, annee)
5 Mars 1953

♦ Déterminer le nombre d'éléments d'une liste

Nous avons déjà rencontré la fonction len qui donne la longueur d'une chaîne de caractères. C'est exactement la même instruction qui permet de déterminer le nombre d'éléments d'une liste :

In [16]:
len(courses)
Out[16]:
5

Il y a donc 5 choses à acheter dans notre liste de courses !

⚡ A retenir :
la fonction len renvoie la longueur de la liste passée en paramètre. Par exemple len(["N","S","I"]) renvoie 3 car cette liste contient trois éléments.

✎ Exercices

  1. Dans la cellule ci-dessous, on a définit une liste alphabet, ajouter l'instruction permettant de vérifier qu'il y a bien 26 caractères dans cette liste
In [17]:
# Votre réponse ici
alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

len(alphabet)
Out[17]:
26
  1. Trouver deux façons différentes d'afficher l'avant avant dernière lettre de l'alphabet (c'est à dire le x)
In [18]:
# Votre réponse ici
print(alphabet[23])
print(alphabet[-3])
x
x
  1. Vérifier que alphabet[26] renvoie une erreur. Expliquer pourquoi
In [19]:
# Votre réponse ici
alphabet[26]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-19-8f28c7e830e5> in <module>
      1 # Votre réponse ici
----> 2 alphabet[26]

IndexError: list index out of range
Les indices vont de 0 à 25. l'indice 26 n'exixte pas, donc une erreur

♦ Modifier un élément dans la liste

Les listes sont modifiables.
On peut par exemple changer un élément de notre liste en le repérant par son numéro.
Dans notre exemple, courses[3] est chips, si nous voulons remplacer les chips par des olives dans notre liste de courses, nous pouvons simplement utiliser l'affectation habituelle avec = :

In [20]:
courses[3] = 'olives'
courses
Out[20]:
['oignons', 'huile', 'sel', 'olives', 'orange']

✎ Exercices

  1. Dans la liste de courses ci-dessus, remplacer le sel par du poivre
In [21]:
# Votre réponse ici
courses[2] = 'poivre'
courses
Out[21]:
['oignons', 'huile', 'poivre', 'olives', 'orange']

♦ Ajouter ou supprimer un élément dans la liste

On peut aussi rajouter un élément à cette liste de courses grâce à append

In [22]:
# Il faut prendre aussi du persil !
courses.append('persil')

Affichons la liste avec print pour constater que le persil y figure maintenant :

In [23]:
courses
Out[23]:
['oignons', 'huile', 'poivre', 'olives', 'orange', 'persil']

Et bien evidemment on peut supprimer un élément de cette liste grâce à remove

In [24]:
#En fait ce n'est pas la peine de prendre du poivre
courses.remove("poivre")
courses
Out[24]:
['oignons', 'huile', 'olives', 'orange', 'persil']
In [25]:
courses.append('poivre')
courses.append('poivre')
courses
Out[25]:
['oignons', 'huile', 'olives', 'orange', 'persil', 'poivre', 'poivre']
In [26]:
while 'poivre' in courses:
    courses.remove("poivre")
courses
Out[26]:
['oignons', 'huile', 'olives', 'orange', 'persil']

Attention : essayer de supprimer un élément qui ne figure pas dans la liste renverra une erreur.

In [27]:
# Il n'y a pas de vanille dans notre liste de courses, aussi tenter de l'enlever renverra une erreur
courses.remove("vanille")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-27-47e5d4c619aa> in <module>
      1 # Il n'y a pas de vanille dans notre liste de courses, aussi tenter de l'enlever renverra une erreur
----> 2 courses.remove("vanille")

ValueError: list.remove(x): x not in list

✎ Exercices

  1. Pour son anniversaire, Alice a invité ses amis : Hector, Paul, Jules, Marie, Pierre, Alphonsine, Dorothée, Eva, Jeannette, Kathy, Carole, et Zoé. . Créer une liste invites représentant les invités d'Alice.
  2. Finalement, Alice rajoute Christian et Louis à sa liste et decide de ne plus inviter Kathy. Traduire ces modifications par des instructions Python.
  3. Comment obtenir le nombre d'invités ?
In [28]:
# Vos réponses ici
# Question 11
invites = ["Hector", "Paul", "Jules", "Marie", "Pierre", "Alphonsine", "Dorothée", "Eva", "Jeannette", "Kathy", "Carole", "Zoé"]

# Question 12
invites.append("Christian")
invites.append("Louis")
invites.remove("Kathy")
print(invites)

# Question 13
len(invites)
['Hector', 'Paul', 'Jules', 'Marie', 'Pierre', 'Alphonsine', 'Dorothée', 'Eva', 'Jeannette', 'Carole', 'Zoé', 'Christian', 'Louis']
Out[28]:
13

♦ Insertion d'un élément dans la liste

Parfois, on aura besoin d'insérer un élément à un emplacement particulier dans la liste, dans ce cas, il faut utiliser insert en donnant entre parenthèses l'emplacement où on désire insérer un élément. Par exemple supposons qu'on dispose d'une liste triée de notes :

In [29]:
notes = [8, 11, 12, 15, 17]

Si on veut insérer dans cette liste la note 14, on doit le faire après le 12 pour conserver l'ordre, il faut donc insérer à l'indice 3 :

In [30]:
notes.insert(3,14)
notes
Out[30]:
[8, 11, 12, 14, 15, 17]
⚡ A retenir :
  • On peut ajouter un élément à la fin d'une liste à l'aide de append, la syntaxe est : <liste>.append(<nouvel_element>).
  • On peut supprimer un élément d'une liste à l'aide de remove, la syntaxe est : <liste>.remove(<element>). Tenter de supprimer un élément à un indice inexistant renvoie une erreur.
  • On peut insérer un élément dans une liste à l'emplacement souhaité à l'aide de insert, la syntaxe est : <liste>.insert(<indice>,<nouvel_element>)

✎ Exercices

  1. On a crée ci-dessous, une liste de meubles, ajouter à cette liste 'table' et 'tabouret' à l'aide de deux utilisation de append.
In [31]:
meubles = ["armoire","chaise","étagère","bureau","lit"]
# Ecrire les deux append en dessous

meubles.append("table")
meubles.append("tabouret")

meubles
Out[31]:
['armoire', 'chaise', 'étagère', 'bureau', 'lit', 'table', 'tabouret']
  1. Supprimer "lit" de cette liste.
In [32]:
# Votre réponse ici
meubles.remove("lit")

meubles
Out[32]:
['armoire', 'chaise', 'étagère', 'bureau', 'table', 'tabouret']
  1. Créer la liste `a_voir=['Matrix','Starwars','Ironman2']`, insérer 'Ironman' avant 'Ironman2'
In [35]:
# Votre réponse ici
a_voir=['Matrix','Starwars','Ironman2']

a_voir.insert(2, 'Ironman')
In [34]:
a_voir
Out[34]:
['Matrix', 'Starwars', 'Ironman', 'Ironman2']
  1. A l'aide de remove, supprimer tous les films de la liste a_voir. Que se passe-t-il lorsqu'on affiche maintenant la liste a_voir ?
In [36]:
# Votre réponse ici
a_voir.remove('Matrix')
a_voir.remove('Starwars')
a_voir.remove('Ironman')
a_voir.remove('Ironman2')

a_voir  # est vide
Out[36]:
[]
In [37]:
cpt = len(a_voir) - 1
while  cpt >= 0:
    a_voir.remove(a_voir[cpt])
    cpt = cpt - 1 

a_voir
Out[37]:
[]

♦ Prendre un élément dans la liste

Pour prendre un élément de la liste par son numéro on dispose de pop(numero), cela a deux effet :

  • supprimer l'élement figurant à cette position dans la liste
  • renvoyer cet élément

Si on ne demande pas de valeur pour numero, c'est le dernier élément de la liste qui sera supprimé et renvoyé.

In [38]:
# Suppression de l'élément situé au début de la liste et récupération dans 'item'
item = courses.pop(0)
In [39]:
# Vérifions que tout s'est passé comme prévu (item doit contenir le premier élément de la liste)
item
Out[39]:
'oignons'
In [40]:
# et le premier élément ne figure plus dans la liste
courses
Out[40]:
['huile', 'olives', 'orange', 'persil']
In [41]:
# Si on ne donne pas de numéro, c'est à dire en faisant courses.pop() c'est le dernier élément qui est concerné
item = courses.pop()
In [42]:
item
Out[42]:
'persil'
In [43]:
courses
Out[43]:
['huile', 'olives', 'orange']
⚡ A retenir : <ma_liste>.pop(numero) a deux effets
  • supprimer de la liste l'élément situé à l'indice numero
  • renvoyer cet élément.
Si le numero n'est pas fourni, c'est le dernier élément de la liste qui est concerné.

✎ Exercices

  1. Créer une liste a_faire contenant les éléments suivants : "réviser les listes de python", "préparer l'évaluation d'anglais", "travailler le projet de NSI", "Faire l'exercice de maths"

  2. Ajouter à cet liste les éléments suivants "regarder ma série préférée", "aller à la plage".

  3. Quel sera le résultat de l'instruction elt = a_faire.pop() ?

In [44]:
# Vos réponses ici
# Question 18
a_faire = ["réviser les listes de python", "préparer l'évaluation d'anglais", "travailler le projet de NSI", "Faire l'exercice de maths"]

# Question 19
a_faire.append("regarder ma série préférée")
a_faire.append("aller à la plage")

a_faire
Out[44]:
['réviser les listes de python',
 "préparer l'évaluation d'anglais",
 'travailler le projet de NSI',
 "Faire l'exercice de maths",
 'regarder ma série préférée',
 'aller à la plage']
In [45]:
# Question 20
# On va enlever la dernière chose à faire et la sauvgarder dans la vatiable elt

elt = a_faire.pop()


print(a_faire)
elt
['réviser les listes de python', "préparer l'évaluation d'anglais", 'travailler le projet de NSI', "Faire l'exercice de maths", 'regarder ma série préférée']
Out[45]:
'aller à la plage'
In [ ]: