Les listes vs tuples vs sets vs dictionnaires en Python

Article publié le et mis à jour le .

Les listes vs tuples vs sets vs dictionnaires en Python

Savez-vous utiliser toutes les structures de données en Python ?

Découvrez tout dessus avec ce guide rapide sur les listes, tuples, sets et dictionnaires.

Les Listes en Python

Les listes sont des structures de données qui permettent d’avoir plusieurs objets dans un seul ensemble. On peut les modifier facilement comme c’est un type qui n’est pas immuable contrairement aux tuples et aux sets en Python.

Syntaxe d’une liste

On peut declarer une liste en utilisant les crochets et on sépare ses éléments par des virgules. On peut aussi utiliser la fonction list pour transformer un autre objet en liste.

[1, 2, 3, 4]
list(...)

Les Tuples en Python

Les tuples sont immuables, cela veut dire que contrairement aux listes, on ne peut pas les modifier.

Syntaxe d’un tuple

On peut declarer un tuple en utilisant des parentheses et on sépare ses elements par des virgules. On peut aussi utiliser la fonction tuple pour transformer un autre objet en tuple.

(1, 2, 3, 4)
tuple(...)

Quand utiliser les tuples ?

Si on fait nombre à la position 5 = 6, on aura une erreur car les tuples sont immuables.

nombres = (1, 2, 3, 4, 5)

nombres[5] = 6  # Erreur (TypeError)

On peut utiliser des fonctions comme len sur un tuple, et on peut aussi voir si un élément se trouve dans un tuple avec le mot-clé in.

Le tuple nous donne accès à deux méthodes : index et count.

index permet de connaître l’indice d’un élément s’il se trouve dans le tuple, et count nous permet de compter combien de fois un élément se trouve dans le tuple.

Qu’est ce qui différencie un tuple d’une liste ?

Les différences entre une liste et un tuple sont donc que les tuples sont plus rapides que les listes car ils sont immuables, contrairement aux listes qu’on peut modifier facilement.

Mais on va aussi avoir tendance à mettre des éléments de même type dans une liste, alors qu’on va souvent utiliser les tuples comme des structures avec des types d’objets différents.

Par exemple, si on veut déclarer un ensemble de nombres, on aura le réflexe de faire une liste.

[1, 2, 3, 4]

Mais si on veut un ensemble qui n’est pas un dictionnaire et dans lequel on a plusieurs types de variables différentes, comme les détails d’un étudiant par exemple, on aura tendance à utiliser un tuple.

("Alice", 24, "F", 18.5)

Les Sets en Python

Les sets sont des ensembles qu’on déclare avec des accolades. Ils n’ont pas d’ordre précis et on ne peut pas les modifier car ils sont immuables. On n’a donc pas de doublon dans un set, et on ne peut pas les modifier avec une simple assignation, comme on le ferait avec une liste.

Syntaxe d’un set

On peut declarer un set en utilisant des accolades et on sépare ses elements par des virgules. On peut aussi utiliser la fonction set pour transformer un autre objet en set.

{1, 2, 3, 4}
set(...)

Quand utiliser les sets ?

Prenons un set de nombres avec plusieurs nombres dans le désordre et avec des doublons.

nombres = {0, 4, 2, 3, 2, 3, 2, 1, 0}

print(nombres)  # {0, 1, 2, 3, 4}

En l’affichant avec print, on voit que Python a changé l’ordre de notre set en 0, 1, 2, 3, 4 et qu’il a retiré les doublons 2 et 3.

Avec les sets, comme avec les listes, on peut utiliser la fonction len qui fonctionne également, ainsi que le mot in pour vérifier si un élément se trouve dans notre set.

La différence avec les listes, c’est que comme les sets n’ont pas d’ordre, on ne peut pas accéder à un élément précis en lui passant un indice.

Si on fait nombres[2], Python va nous renvoyer une erreur.

On ne peut pas non plus changer les valeurs d’un set, comme on le fait avec les listes en assignant une valeur à un indice. Mais heureusement, on a les méthodes add et remove pour faire plus ou moins la même chose.

nombres.add(5) ajoutera bien l’entier 5 à notre set de nombres.

On peut aussi retirer un élément précis avec nombres.remove et puis lui passer un élément en paramètre.

La méthode pop sur un set permet aussi de retirer le premier élément du set.

nombres = {3, 4, 2, 0, 2, 1, 3}

print(nombres)

try:
    print(nombres[2])
except TypeError:
    print("On ne peut pas acceder a un set avec des crochets")


nombres.add(5)
nombres.remove(3)
nombres.pop()

Union, intersection et difference avec les sets

On a aussi des méthodes qui permettent de comparer deux sets entre eux : union, intersection et différence.

L’Union est ce qui sera contenu dans les deux sets. Donc, si on fait set1.union(set2), on a tous les éléments qui se trouvent dans set1 ou dans set2.

L’intersection est ce qui se trouve en commun dans les deux sets. set1.intersection(set2) nous donnera les éléments qui sont à la fois dans set1 et dans set2.

Et différence est ce qu’on trouve dans le set1 mais pas dans le set2. set1.différence(set2) nous donnera les éléments qui sont exclusifs à set1.

set_1 = {0, 1, 2}
set_2 = {2, 3, 4}

print(set_1.union(set_2))
print(set_1.intersection(set_2))
print(set_1.difference(set_2))

Pour voir les autres méthodes de set et en général, on peut utiliser la fonction dir à laquelle on passe notre objet pour voir toutes les méthodes et attributs d’un objet.

La fonction help permet aussi d’avoir l’aide de base de Python pour un type d’objet.

set_1 = {0, 1, 2}
print(dir(set_1))
print(help(set_1))

Les Dictionnaires en Python

Les dictionnaires sont des types d’ensemble clé-valeurs. Ils ont un ordre précis et on peut les modifier avec une simple assignation, mais ils ne peuvent pas avoir de clés en doublon.

Syntaxe d’un dictionnaire

On peut déclarer un dictionnaire avec des accolades, comme un set, sauf qu’on va lui passer un ensemble clé-valeur.

{"un": 1, "deux": 2, "trois": 3}
dict(...)

Quand utiliser un dictionnaire en Python ?

Pour accéder à une valeur, on utilise la clé, comme on le ferait avec l’indice numérique dans une liste, sauf que là, on l’a nommé avec une clé. Donc, si on fait nombre[“un”], on aura bien l’entier 1.

nombres = {"un": 1, "deux": 2, "trois": 3}

print(nombres["un"])

Pour voir toutes les méthodes et attributs d’un dictionnaire, on peut utiliser la fonction dir.

Donc, faisons dir(nombres), et on voit, par exemple, qu’on a la fonction get.

On utilise la fonction get pour obtenir un élément dans un dictionnaire, c’est comme utiliser la clé entre crochets. Sauf que si on donne une mauvaise clé entre crochets, Python va nous renvoyer une erreur et crasher violemment avec une erreur de clé. Alors qu’avec get, Python va essayer de récupérer la valeur pour la clé donnée et il renverra None s’il ne trouve pas la valeur pour la clé.

On peut aussi lui passer une valeur en deuxième position en paramètre, ça deviendra la valeur qu’il renverra par défaut s’il ne trouve pas la clé dans le dictionnaire.

nombres = {"un": 1, "deux": 2, "trois": 3}

print(nombres.get("deux"))
print(nombres.get("quatre", "4 n'est pas dans le dictionnaire"))

Vous voulez en apprendre plus sur cette manière d’accéder à un élément dans un dictionnaire ? Alors mon article sur la méthode get vous intéressera sûrement !

C’est donc une bonne pratique d’utiliser get plutôt que faire des try except, par exemple.

nombres = {"un": 1, "deux": 2, "trois": 3}

try:
  print(nombres["quatre"])
except KeyError:
  print("quatre n'est pas une clef valide pour le dictionnaire nombres")

On peut aussi modifier ou ajouter une nouvelle paire de clés avec la méthode update, ce qui revient à utiliser l’assignation.

Par exemple, nombres["cinq"] = 5 est équivalent à nombres.update({"cinq": 5}).

On peut aussi utiliser la méthode pop pour retirer un élément d’un dictionnaire en lui passant une clé.

Par exemple, nombres.pop("trois") retirera notre paire clé-valeur qui a la clé 3.

nombres = {"un": 1, "deux": 2, "trois": 3}

nombres.update({"quatre": 4})
nombres.pop("trois")

On peut aussi récupérer toutes les clés d’un dictionnaire avec la méthode keys().

Donc, si on fait nombre.keys(), on récupère toutes les clés, pareil pour les valeurs avec la méthode values.

Si on fait nombre.values, on a toutes les valeurs de notre dictionnaire.

Et items() nous renvoie une sorte de liste qui contient des tuples qui eux-mêmes contiennent les clés et les valeurs pour chaque élément de notre dictionnaire.

nombres = {"un": 1, "deux": 2, "trois": 3}

print(nombres.keys())
print(nombres.values())
print(nombres.items())

Aller plus loin avec les listes, tuples, sets et dicts

Et voilà, c’étaient les dictionnaires. Vous connaissez maintenant quatre nouveaux types de collection : les listes, les tuples, les sets et les dictionnaires.

Pensez a utiliser ces collections en fonction de vos besoin et ne pas juste utiliser des lites si vous voulez un code plus optimisé et “pythonesque”.