CPGE OUJDA                                                                                                                                                                                                                                                    SUP

Listes(cours N°2)

NB :pour python 3 ajouter print

. Définition

Une liste est une structure de données qui contient une série de valeurs. Python autorise la construction de liste contenant des valeurs de types différents (par exemple entier et chaîne de caractères), ce qui leur confère une grande flexibilité. Une liste est déclarée par une série de valeurs (ne pas oublier les guillemets, simples ou doubles, s'il s'agit de chaînes de caractères) séparées par des virgules, et le tout encadré par des crochets. En voici quelques exemples :

>>> animaux = [’girafe’,’tigre’,’singe’,’souris’]

>>> tailles = [5, 2.5, 1.75, 0.15]

>>> mixte = [’girafe’, 5, ’souris’, 0.15]

>>> animaux

[’girafe’, ’tigre’, ’singe’, ’souris’]

>>> tailles

[5, 2.5, 1.75, 0.15]

>>> mixte

[’girafe’, 5, ’souris’, 0.15]

Lorsque l'on affiche une liste, Python la restitue telle qu'elle a été saisie.

 Utilisation

Un des gros avantages d'une liste est que vous pouvez appeler ses éléments par leur position. Ce numéro est appelé indice (ou index) de la liste.

liste  : [’girafe’, ’tigre’, ’singe’, ’souris’]

indice :        0        1        2         3

Soyez très attentifs au fait que les indices d'une liste de n éléments commence à 0 et se termine à n-1. Voyez l'exemple suivant :

>>> animaux = [’girafe’,’tigre’,’singe’,’souris’]

>>> animaux[0]

’girafe’

>>> animaux[1]

’tigre’

>>> animaux[3]

’souris’

Par conséquent, si on appelle l'élément d'indice 4 de notre liste, Python renverra un message d'erreur :

Opération sur les listes

Tout comme les chaînes de caractères, les listes supportent l'opérateur « + »de concaténation, ainsi que l'opérateur « * »pour la duplication :

>>> ani1 = [’girafe’,’tigre’]

>>> ani2 = [’singe’,’souris’]

>>> ani1 + ani2

[’girafe’, ’tigre’, ’singe’, ’souris’]

>>> ani1 * 3

[’girafe’, ’tigre’, ’girafe’, ’tigre’, ’girafe’, ’tigre’]

 Indiçage négatif et tranches

La liste peut également être indexée avec des nombres négatifs selon le modèle suivant :

liste          : [’girafe’, ’tigre’, ’singe’, ’souris’]

indice positif :        0        1        2         3

indice négatif :       -4       -3       -2        -1

Ou encore :

liste          : [’A’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’K’,’L’]

indice positif :   0   1   2   3   4   5   6   7   8   9

indice négatif : -10  -9  -8  -7  -6  -5  -4  -3 - 2  -1

Les indices négatifs reviennent à compter à partir de la fin. Leur principal avantage est que vous pouvez appeler le dernier élément d'une liste à l'aide de l'indice -1 sans pour autant connaître la longueur de la liste.

>>> animaux = [’girafe’,’tigre’,’singe’,’souris’]

>>> animaux[-4]

’girafe’

>>> animaux[-2]

’singe’

>>> animaux[-1]

’souris’

Un autre avantage des listes est la possibilité de sélectionner une partie en utilisant un indiçage construit sur le modèle [m:n+1] pour récupérer tous les éléments, du émième au énième (de l'élément m inclus à l'élément n+1 exclu). On dit alors qu'on récupère une tranche de la liste, par exemple :

>>> animaux = [’girafe’, ’tigre’, ’singe’, ’souris’]

>>> animaux[0:2]

[’girafe’, ’tigre’]

>>> animaux[0:3]

[’girafe’, ’tigre’, ’singe’]

>>> animaux[0:]

[’girafe’, ’tigre’, ’singe’, ’souris’]

>>> animaux[:]

[’girafe’, ’tigre’, ’singe’, ’souris’]

>>> animaux[1:]

[’tigre’, ’singe’, ’souris’]

>>> animaux[1:-1]

[’tigre’, ’singe’]

Remarquez que lorsqu'aucun indice n'est indiqué à gauche ou à droite du symbole « : », Python prend par défaut tous les éléments depuis le début ou tous les éléments jusqu'à la fin respectivement.

Dans les versions récentes de Python, on peut aussi préciser le pas en ajoutant un « : »supplémentaire et en indiquant le pas par un entier.

>>> animaux = [’girafe’, ’tigre’, ’singe’, ’souris’]

>>> animaux[0:3:2]

[’girafe’, ’singe’]

>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> x

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> x[::1]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> x[::2]

[0, 2, 4, 6, 8]

>>> x[::3]

[0, 3, 6, 9]

>>> x[1:6:3]

[1, 4]

Finalement, on voit que l'accès au contenu d'une liste avec des crochets fonctionne sur le modèle liste[début:fin:pas].

Fonctions range et len

L'instruction range() vous permet de créer des listes d'entiers (et d'entiers uniquement) de manière simple et rapide. Voyez plutôt :

>>> range(10)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(0,5)

[0, 1, 2, 3, 4]

>>> range(15,20)

[15, 16, 17, 18, 19]

>>> range(0,1000,200)

[0, 200, 400, 600, 800]

>>> range(2,-2,-1)

[2, 1, 0, -1]

L'instruction range() fonctionne sur le modèle range([début,] fin[, pas]). Les arguments entre crochets sont optionnels.

L'instruction len() vous permet de connaître la longueur d'une liste, ce qui parfois est bien pratique lorsqu'on lit un fichier par exemple, et que l'on ne connaît pas a priori la longueur des lignes. Voici un exemple d'utilisation :

>>> animaux = [’girafe’, ’tigre’, ’singe’, ’souris’]

>>> len(animaux)

4

>>> len(range(10))

10

 Listes de listes

Pour finir, sachez qu'il est tout à fait possible de construire des listes de listes. Cette fonctionnalité peut être parfois très pratique. Par exemple 

>>> enclos1 = [’girafe’, 4]

>>> enclos2 = [’tigre’, 2]

>>> enclos3 = [’singe’, 5]

>>> zoo = [enclos1, enclos2, enclos3]

>>> zoo

[[’girafe’, 4], [’tigre’, 2], [’singe’, 5]]

Dans cet exemple, chaque sous-liste contient une catégorie d'animal et le nombre d'animaux pour chaque catégorie. Pour accéder à un élément de la sous-liste, on utilise une double indication.

>>> zoo[1]

[’tigre’, 2]

>>> zoo[1][0]

’tigre’

>>> zoo[1][1]

2

Exercices

Conseil : utilisez l'interpréteur Python.

  1. Constituez une liste semaine contenant les sept jours de la semaine. À partir de cette liste, comment récupérez-vous seulement les cinq premiers jours de la semaine d'une part, et ceux du week-end d'autre part ( utilisez pour cela l'indication ) ? Cherchez un autre moyen pour arriver au même résultat ( en utilisant une autre indication ).
  2. Trouvez deux manières pour accéder au dernier jour de la semaine.
  3. Inversez les jours de la semaine en une commande.
  4. Créez quatre listes hiver, printemps, ete et automne contenant les mois correspondant à ces saisons. Créez ensuite une liste saisons contenant les sous-listes hiver, printemps, ete et automne. Prévoyez ce que valent les variables suivantes, puis vérifiez-le dans l'interpréteur :
  5. Comment expliquez-vous ce dernier résultat ?
    Affichez la table des 9 en une seule commande avec l'instruction range().
  6. Avec Python, répondez à la question suivante en une seule commande. Combien y a-t-il de nombres pairs dans l'intervalle [2 , 10000] inclus ?