Les sets et les tuples#

Nous avons vu jusqu’à présent deux types qui permettent de stocker des collections de données : les listes et les dictionnaires. Dans ce chapitre, nous nous intéressons à deux autres structures qui permettent elles aussi de stocker des collections : les sets et les tuples.

Les tuples#

Commençons par les tuples, car vous en avez déjà manipulé sans même vous en rendre compte. Prenons l’exemple de la fonction suivante :

def comment_tu_tappelles():
    prenom = "Pierre"
    nom = "Lapin"
    return prenom, nom

Vous remarquez que cette fonction retourne deux valeurs, séparées par une virgule. Ces deux valeurs forment un tuple.

Pour définir un nouveau tuple, on peut écrire :

# Les parenthèses sont facultatives
a = 1, 2, 3
b = ("a", "b", "c")

print(a)
print(b)
(1, 2, 3)
('a', 'b', 'c')

Un tuple ressemble en de nombreux points à une liste, mais il est impossible de modifier les données d’un tuple une fois défini. Il n’est donc pas possible d’ajouter / supprimer des données (comme on le faisait avec l.append() ou l.remove() pour les listes par exemple). Il n’est pas non plus possible de modifier un élément d’un tuple (si a est un tuple, on ne peut donc pas écrire a[0] = 5 comme on l’aurait fait pour une liste).

Les sets#

Les sets, pour leur part, permettent de stocker des ensemble de valeurs, sans ordre et sans répétition. On peut ainsi voir les sets comme des dictionnaires qui auraient des clés, mais pas de valeurs associées. Cela fait d’ailleurs écho à la syntaxe utilisée en Python pour définir un set, qui utilise les accolades, comme pour les dictionnaires :

c = {1, 2, 3}
d = {"truc", "machin", "chose"}

print(c)
print(d)
{1, 2, 3}
{'machin', 'chose', 'truc'}

Vous pouvez remarquer, dans l’exemple ci-dessus, que, comme pour les dictionnaires, l’ordre dans lequel les éléments sont déclarés dans un set n’est pas préservé lors de l’affichage.

Puisque les sets ne peuvent pas stocker de valeurs répétées, lorsqu’on convertit une liste en set, on obtient une liste sans doublon (mais on perd la notion d’ordre) :

ma_liste = ["truc", "machin", "truc", "chose", "machin", "machin"]
mon_set = set(ma_liste)  # Convertit la liste en set

print(mon_set)
{'machin', 'chose', 'truc'}

Une fois un set défini, on ne peut plus modifier les valeurs qu’il contient, mais on peut lui supprimer / ajouter des valeurs :

mon_set = {"truc", "machin", "chose"}

# Ajouter un élément
mon_set.add("bidule")

# Supprimer un élément
mon_set.remove("truc")

print(mon_set)
{'machin', 'chose', 'bidule'}

Tableau récapitulatif#

Voici un tableau de ce qu’on peut / ne peut pas faire avec l’un ou l’autre des types de base pour les collections de données :

Listes

Dictionnaires

Tuples

Sets

Définition

[1, 4]

{"a": 1, "b": 4}

(1, 4)

{1, 4}

Possibilité d’insérer /
supprimer des éléments

Possibilité de modifier
des éléments

valeurs : ✅
clés : ❌

Possibilité de stocker
des valeurs dupliquées

\(^*\)

Valeurs ordonnées

\(^{**}\)

  • \(^*\) : dans un dictionnaire, les valeurs peuvent être dupliquées, mais pas les clefs

  • \(^{**}\) : en fait, à partir de la version 3.7 de Python, les dictionnaires sont ordonnés, mais pour que votre code tourne de manière identique quelle que soit la version de Python utilisée, il est préférable de ne pas faire d’hypothèse sur l’ordre des paires clés-valeurs dans les dictionnaires