Les listes

Introduction

Une liste est un ensemble d’objets mis dans un ordre précis. Elles sont définies entre crochets et les éléments sont séparés par une virgule.

Syntaxe :

L’identificateur (le nom) d’une liste suit les mêmes règles que les identificateurs de variables. On définit une liste vide comme suit:

ma_liste = []

Sinon, une liste peut comporter des elements quelconques :

L = [2, "hello", 3.5, True, 20, 23]

On peut créer une liste contenant n fois le même objet :

L = [0] * 4
# Donnera la liste [0, 0, 0, 0]

On peut utiliser les opérateurs + pour la concaténation de deux listes, et * pour la répétition d’une liste.

T = [1, 2] * 2
# Donnera [1, 2, 1, 2]

S = ['a', 10] + [1] * 3
# Donnera ['a', 10, 1, 1, 1]

Pour la suite du cours, on considère la liste L suivante :

#    0   1       2    3     4   5    <--- l'indice de chaque élément
L = [2, "hello", 3.5, True, 20, 23]

Les elements de la liste sont indexes a partir de 0, Pour accéder aux elements de la liste:

print(L[3])     # Affichera True
print(L[0])     # Affichera 2
print(L[1])     # Affichera hello

Attention: le premier élément correspond à l’indice 0

Modification d’un élément

On peut modifier les elements d’une liste déjà existante comme suit :

L = [1, 2, 3]

L[0] = "hello"
# La liste devient ["hello", 2, 3]

L[2] = True
# La liste devient ["hello", 2, True]

L[3] = 5
# ERREUR list index out of range.

Ajout et suppression d’élément

Lorsqu’une liste existe, il est possible d’ajouter ou enlever un élément très facilement avec les fonctions pop et append :

L = [1, 2, 3]

L.append(5)         # Ajout l'élément 5 a la fin de la liste
# Donnera [1, 2, 3, 5]

L.pop(2)            # Enlève l'élément d'indice 2
# Donnera [1, 2, 5]

L.pop()             # Si on donne pas de paramètre, pop enlève le dernier
# Donnera [1, 2]

L = L + ['a', 'b']    # concaténation de deux listes
# Donnera [1, 2, 'a', 'b']

Taille d’une liste

Pour obtenir la taille d’une liste, on utilise la fonction len()

L = [1, 'a', True]
print(len(L))       # Affichera 3

L = [2, "hello", 3.5, True, 20, 23]
print(len(L))       # Affichera 6

Les elements d’une liste L sont donc indexes de 0 a len(L)-1.

Pour accéder au dernier élément d’une liste : L[len(L)-1]

L = [2, "hello", 3.5, True, 20, 23]
x = L[len(L)-1]
print(x)        # Affichera 23

Indexage négatif

Pour accéder aux elements de la liste, on peut utiliser l’indexage négatif. Dans ce cas les elements de la liste sont indexe du dernier élément -1, au premier -len(L)

#   -6     -5     -4   -3   -2  -1
L = [2, "hello", 3.5, True, 20, 23]

print(L[-2])          # Affichera 20

L’indexage négatif revient a retrancher len(L) de l’indice positif, par exemple l’élément d’indice 0 peut aussi être indexer par -len(L).

Pour accéder au dernier élément d’une liste, on peut donc utiliser L[-1] au lieu de L[len(L)-1]

Méthodes et fonctions sur les listes

  • len(L) permet d’obtenir le nombre d’elements d’une liste.

  • L.append(e) permet d’ajouter l’élément e a la fin de la liste.

  • L.clear() permet de vider la liste.

  • L.copy() permet de faire une copy de la liste

  • L.count(e) permet de compter le nombre d’occurrence de l’élément e dans L

  • L.extend(T) permet d’ajouter tous les elements de la liste T a la fin de la liste L

  • L.index(e) renvoie l’indice de l’élément e dans la liste L. Attention, la fonction donne une erreur si l’élément n’est pas dans la liste.

  • L.insert(i, e) permet d’insérer l’élément e dans l’indice i.

  • L.pop(i) permet d’enlever l’élément d’indice i et le renvoie.

  • L.remove(e) permet d’enlever l’élément e de la liste si il existe. Attention, la fonction donne une erreur si l’élément n’est pas dans la liste

  • L.reverse() permet d’inverser l’ordre des elements dans la liste

  • L.sort() permet de trier les elements de la liste. Pour cela les elements doivent être du même type.

Parcours d’une liste

On peut parcourir la liste comme suit :

for i in range(len(L)):
    print("l'élément d'indice", i, "est", L[i])

Ou encore :

for i in L:
    print("l'élément est", i)

Remarque : Si on parcourt une liste par for x in L, la variable x va itérer sur les éléments de L mais on n’a pas accès à l’indice de chaque élément. Par contre quand on utilise for i in range(len(L)), on peut accéder a l’élément par L[i], ainsi que son indice i.

Les tranches de listes

On peut prendre une partie d’une liste définie par un indice de début d, indice de fin f, et le pas p utilise, avec la syntaxe : L[d:f:p] ou L[d:f] pour un pas de 1

Exemple

#    0   1        2    3     4   5
L = [2, "hello", 3.5, True, 20, 23]
print(L[1:3])     # Affichera ["hello", 3.5]

Si on omet l’indice de début, la tranche commencera du début de la liste. De même, si on omet l’indice de fin, la tranche finira a la fin de la liste.

print(L[3:])      # [True, 20, 23]
print(L[:2])      # [2, "hello"]

print(L[3:0:-1])  # [True, 3.5, "hello"]

print(L[::-1])    # permet d'inverser la liste

Si les indices début ou fin sont dans le mauvais ordre, on obtient une liste vide :

print(L[3:2])     # Affichera []