Les Listes

Les listes sont des collections ordonnées d'objets qui peuvent être de tout type, y compris du type liste. Elles sont modifiables : on peut ajouter et supprimer des éléments n'importe où dans la liste.

Une liste apparaît comme une succession d'objets compris entre crochets et séparés par des virgules.

  • couleurs = ['trèfle', 'carreau', 'coeur', 'pique']
  • x =  ["un",1,"deux",2]    #  
  • x = [3]       #  création d'une liste d'un élément (ce n'est pas un entier)
  • x = [ ]  ;  x = list ()   #   crée des listes vides

Le slicing

Les éléments d'une liste sont indexés. Le premier élément a l'indice 0.

L représente une liste.   L=[1,2,3,4,5,10,11,12,13,14]

L[i]  retourne le i\up{ème élément de L. Ex :   L[2] renvoie  3

L[:]   extrait la liste toute entière. Ex :   L[:]   renvoie [1,2,3,4,5,10,11,12,13,14]

L[debut : fin]      extrait une liste contenant les éléments dont les indices sont compris entre debut et fin exclus. Ex : 
   L[2:7]  renvoie [3, 4, 5, 10, 11]

L[debut : fin : pas]      extrait une  liste contenant contenant les éléments de l dont les indices sont compris entre debut et fin exclus, ces indices sont espacés de pas : i,i + pas,i + 2pas ,i+3pas,\dots Ex :     L[1:9:2] renvoie  [2, 4, 10, 12]    

 Remarque :  On peut utiliser des indices négatifs :  i (négatif) correspond à l'indice  len(L) + i (pour i compris entre -len(L) et -1).    

Tout autre indice provoque une erreur. Les indices négatifs peuvent être utiliser dans le slicing.

  •   L[-1:-len(L):-1] inverse la liste ;   L[3:-3:-1] renvoie la liste vide.

Les fonctions

L représente une liste.   L=[1,2,3,4,5,2,3,4]

  • x in L (respectivement not in)      est vrai si x est un des éléments de L . Ex    1 in L renvoie  True
  • L+T :   concaténation de L et T.  Ex :  [1,3]+["Un","Trois"]  renvoie [1,3,"Un","Trois"]
  • L*n      concatène n copies de L. Ex :  [1,3]*3  renvoie [1,3,1,3,1,3]
  • len(L)      nombre d'éléments de L
  • min(L)      plus petit élément de L.
  • max(L)      plus grand élément de L
  • sum(L)      retourne la somme de tous les éléments
  • del( L[i])      supprime l'élément d'indice i.   ex : del (L[2])  renvoie [1, 2, 4, 5, 2, 3, 4]
  • list(x)       convertit x en une liste quand cela est possible    

 Les méthodes

Les méthodes sont des fonctions liées à l'objet : Ex    L=[1,2,1,3,4,4]

  • count(x)    :   Retourne le nombre d'occurrences de l'élément x. Ex :  L.count(3)  renvoie 2
  • .index(x)    :  Retourne l'indice de la première occurrence de l'élément x. Ex :   L.index(2)  renvoie 1
  • .append(x)   :   Ajoute l'élément x à la fin de la liste L. Ex   L.append(10)    ne renvoie rien mais modifie L directement
  • .insert(i,x)    :   Insère l'élément x à la position i dans la liste 1.Ex :   L.insert(4,0)    ne renvoie rien mais modifie L directement
  • .remove(x)   :    Supprime la première occurrence de l'élément x  Ex :  L.remove(4)  ne renvoie rien mais modifie L directement
  • .sort()    :  Cette fonction trie la liste par ordre croissant.  Ex : L.sort()   ne renvoie rien mais modifie L directement

 Parcourir une liste

On peut parcourir les éléments d'une liste avec une boucle for.

  • for x in liste:

    bloc exécuté pour les différentes valeurs de x élément de liste

Attention : Modifier x ne modifie pas la liste L (x est une variable simple contenant la valeur de L[i]).

  • for i in range(len(liste)):

    bloc exécuté pour les différentes valeurs de i, indice de l'élément L[i]

  • for [i,x] in enumerate(liste):

    bloc exécuté pour les différentes valeurs de l'indice i, mais on a aussi accès à l'élément avec x

  Remarque :

  •  La première syntaxe donne accès aux éléments de la liste mais nous ignorons la position de cette valeur (indice dans le tableau).
  •  La deuxième syntaxe permet d'avoir l'indice mais aussi de récupérer rapidement l'élément liste[i].
  •  La troisième syntaxe donne accès aux éléments et aux indices simultanément.

 ATTENTION : si on souhaite modifier les éléments de la liste, il faut l'indice et écrire   L[i]=valeur.

Problèmes concernant  les listes

[Affectation]

Pour tous les objets non modifiables (nombres, chaînes de caractères \dots), l'affectation A=B fait de A une copie de la variable B. Si on modifie par la suite B, A n'est pas modifiée.

Une liste est un objet modifiable (mutable). Pour ces objets, l'instruction A=B crée un alias A de B, ainsi, A et B seront toujours le même objet.

Si l'on modifie la liste A alors la liste B est aussi modifiée.

[Ne pas confondre modifier et recréer]

il faut distinguer

 les modifications de  l'objet  liste  comme A[2]=5, A.append(100)

 et les opérations qui créent une nouvelle liste (A=A+[100])

[Créer une copie]

Pour copier et créer une nouvelle liste, il faut écrire :    B=list(A).

Attention, si A est une liste contenant des listes, l'instruction précédente ne suffit pas pour créer un nouvel objet. Il faut alors charger le module copy et utiliser la fonction deepcopy qui permet de copier en profondeur les listes de listes.

  A=[[1,2],[3,4]];from copy import deepcopy;B=deepcopy(A);A[1][1]=0;print('A=',A,';B=',B)

donnera A= [[1, 2], [3, 0]] ;B= [[1, 2], [3, 4]]

[paramètre d'une fonction]

on retrouve le même problème lorsque l'on a des listes en paramètres d'une fonction. Sans utilisation de la fonction list ou de deepcopy, toute modification de la variable locale liste modifie aussitôt a variable globale

Il est souhaitable sauf cas particulier de créer tout de suite une copie locale.

Listes données en compréhension

Pour ceux qui souhaite approfondir

définition :   Une liste définie en compréhension est une expression qui permet de générer une liste de manière très compacte. Concrètement, il s'agit de construire une liste à partir d'une autre liste avec une boucle for et éventuellement des conditions.

  • Exemple :  [x**2 for x in [4,5,7]]    (les carrés des nombres 4, 5 et 7)
  • Exemple :    y =  [ i**3 for i in range(0,10)] (la fonction range() permettant de créer la liste auxiliaire).
  • Exemple :    z=[i**2 for i in y if i%2==0] (extrait les nombres pairs de la liste y, puis les élève au carré).
     
Fichier Joint: 

Ajouter un commentaire

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Saisir les caractères affichés dans l'image.