Les conteneurs 3 : Listes

Présentation

Les listes sont des conteneurs semblables en pratique aux tuples à la grande différence que les Listes sont modifiables. Pour définir les listes ont utilise les crochets.

Le programme nous demande d'utiliser une version simplifiée des listes, c'est à dire de taille fixe et contenant des éléments de même type. On utilisera alors le mot tableau à la place de liste.

Si l = [1,2,5,6,8]

Indice i 01234
l[i] =12568
Exemple

 
		

Comme pour le tuples et les chaînes de caractères on peut faire des slices, de la concaténation, on peut avoir la longueur de la liste avec la fonction len. On peut parcourir la liste par indice ou directement.

Exemple

 
		

Il y a une chose difficile à comprendre au début, pour les conteneurs, une variable est une référence au conteneur et pas le conteneur lui même, voyons l'exemple suivant :

Exemple

 
		

Pourquoi ? Un conteneur est souvent très lourd, le dupliquer demande trop de place mémoire et ou trop de mémoire. Il y a une conséquence importante pour les fonction, si on donne une liste en paramètre alors la liste peut changer en fin de fonction. Il y a des styles de programmation et des langages où on refuse ce genre de chose. En programmation impérative cela est courant par contre.

Exemple

 
		

Liste par compréhension.

Si on veut créer une liste contenant les nombres de 1 à 9 on a plusieures manières.

Exemple

 
		

Un exemple d'utilisation des conteneurs.

Télécharger les images suivantes.


		

Q.C.M.

Q.C.M.

Si l = [1,2,3] alors l[1] est égal à





Q.C.M.

Considérons la programme suivant :


					Python va afficher :
					





Q.C.M.

l est définie comme à la question précédente, par compréhension de quelle manière peut on arriver au résultat précédent :





Q.C.M.

Si l = [[1,2,3],[4,5],[6,7,8,9,10]] alors quelle instruction donne 5 ?





Exercices

Exercices
  1. On donne l = [3,2,1,0], donnez sans utiliser Python :
    • len(l)
    • l[1]
    • l[-1]
    • l[len(l)]
  2. On donne l = [ (1,2) , "bonjour" , (3,2,1) , (1,5,7,6) , (8,2) ], donnez sans utilisez Python :
    • len(l).
    • type(l)
    • l[-1]
    • len(l[2])
    • type(l[2])
    • l[1][2]
    • l[-2][2]
    • l[l[0][1]]
  3. On donne tab = ["Paris", "Strasbourg", "Colmar", "Wissembourg"] que va afficher
    1. 2*tab[1] + tab[-1]
    2. for i in range(len(tab)) : print(i)
    3. for i in range(len(tab)) : print(tab[i])
    4. for i in tab : print(i)
    5. for i in range(len(tab)-1,-1,-1) : print(tab[i]])
    6. for i in range(len(tab)) : print(len(tab[i])
Exercices
  1. Télécharger le fichier ouvrez le fichier exercice.py et déterminer les liste L1, L2 et L3 (L3 contient aussi des listes) .

Exercices

Des compteurs

  1. Faire une fonction compte(valeur,l) et qui compte combien de fois valeur est dans l. Exemple compte(4,[1,4,5,4,1]) = 2. On utilisera un parcours par indice.
  2. Faire une fonction compte(a,l) et qui compte combien de fois a est dans l. Exemple compte(4,[1,4,5,4,1]) = 2. On utilisera cette fois un parcours par compréhension.
  3. Faire une fonction compte_anomalies(l) qui doit prend une liste et qui retourne le nombre de problèmes empêchant la liste d'être trié par ordre croissant. Par exemple compte_anomalies([1,2,4,3,2,5,4]) doit être égal à 3 car 4 > 3 (dans un tableau classé 3 doit être avant le 4), 3 > 2 et 5 > 4. (Indication si tab[i] est un nombre le nombre à ca droite est ... )
Exercices

Des extremums

  • Faire une fonction maximum(tab_notes) qui retourne la plus grande des notes du tableau tab_notes.
  • Faire une fonction indice_maximum(tab_notes) qui retourne la première position de la plus grande des notes.
  • Faire une fonction indice_maximum2(tab_notes) qui retourne la dernière position de la plus grand des notes.
  • Faire une fonction mini_et_maxi(tab_notes) qui retourne la plus grande et la plus petite note.
  • Faire une fonction plus_grand_nom(liste_noms) qui retourne le plus grand nom de la liste de nom (si plusieurs noms on la même longueur, retourner le premier). PAr exemple plus_grand_nom(["bonjour", " ", "à", " ", "tous"]) est "bonjour".
  • Exercices
    1. Par compréhension construire une liste égale à [0 3 6 9 12 15 18 21 24 .... 60].
    2. Par compréhension construire une liste égale à [20 19 18 17 16 ... 0].
    3. On a une liste l. Par compréhension (ou en créant une fonction donne_copie(l)) faire une liste nouvelle dont les éléments sont les mêmes que les éléments de l mais qui ne réfère pas à l. (donc modifier l ne modifiera pas la copie)
    4. On a une liste l. Par compréhension faire une liste nouvelle dont les éléments sont les valeurs absolue des élément de la liste l du début.
    5. Faire une fonction absolue_liste(l) qui prend une liste l et qui la transforme pour que tous les éléments négatifs deviennent positifs. Par exemple si l = [-2 , -1, 0, 1, 2] alors après absolue_liste(l) la liste l devient [2 , 1, 0, 1, 2]. Attention ce n'est pas la même question que plus haut car on ne vous demande pas de créer une liste nouvelle mais de modifier une existante.
    Exercices

    Les classiques, ces exercices sont très courants aux épreuves pratiques de terminale.

  • Faire une fonction qui calcule la somme des éléments d'une liste.
  • Faire une fonction qui calcule la moyenne des éléments d'une liste.
  • Utiliser la fonction précédente pour faire une fonction test_commun(l1,l2) pour savoir si un élément de l1 est égal à un élément d'une liste l2. (Par exemple test_commun([2,3],[1,8,9,5,2]) = True car 2 appartient aux deux listes).
  • Faire une fonction nb_egaux(l1,l2) qui retourne le nombre de fois où l1[i] == l2[i] (ex nb_egaux([1,2,3,4,5,6],[4,2,2,4]) = 2). Peut on faire un parcours par compréhension pour résoudre l'exercice ?
  • (Hors programme de première)Faire une fonction indices(a,l) qui retourne une liste qui donne les indices des éléments de la liste l égaux à a. ex indice(4,[1,4,5,4,1]) = [1,3] (indication commencer par créer une liste vide [] et à chaque fois que vous trouver le nombre dans la liste ajouter [i] à la liste.)
  • Faire une fonction inverse(l) qui inverse les éléments de la liste l. Par exemple si l = [1,2,3] alors après inverse(l) on a l=[3,2,1]. Peut on faire la fonction à l'aide d'un prcours par compréhension.
  • (dur)Faire une fonction present(l1,l2) qui retourne True si la liste l1 est incluse dans la liste l2, présent([1,2],[0,1,2,3]) = True et present([1,2],[0,1,3,2]) = False.
  • Solutions