Structures de données en Python : Guide complet
Structures de données en Python : Guide complet
INDEX
1
STRUCTURES DE DONNÉES EN PYTHON
Allons-y...
3
STRUCTURES DE DONNÉES EN PYTHON
1. STRUCTURES DE DONNÉES
Python incorpore plusieurs types de données composées de manière native. Nous pouvons
ver un type composé comme une structure de données qui nous permet d'almanecer
nar une collection d'éléments ou de valeurs. Si vous avez travaillé avec d'autres langages,
un exemple simple serait un tableau vectoriel d'éléments. Python nous offre
plus d'alternatives, avec des caractéristiques différentes selon la façon dont on amis
cenan les valeurs à l'intérieur de la structure et quelles opérations nous pouvons effectuer.
Bien que nous puissions également englober les chaînes (stryunicode) et les ensembles
tos(setyfrozenset)o les constructeurs dans cette catégorisation, dans cette
Unité, nous allons voir les trois structures de données principales de Python :
Tuples.
Listes.
Dictionnaires (ou tables de hachage).
5
STRUCTURES DE DONNÉES EN PYTHON
Les structures de données en Python pourraient être divisées en deux groupes, lasse-
cuencielles (formées par des séquences de données ordonnées) et les ensembles de
données, qui ne sont pas ordonnées. À son tour, nous pouvons également les diviser par struc-
tours de données mutables et immuables, comme nous l'avons vu dans l'unité d'initiation.
Nous allons approfondir un peu plus tous ces termes.
1.1.SÉQUENCES
Nous commencerons par les structures de type séquentiel. Ce sont des types de données com-
placés par une série d'éléments, préservant l'ordre ou la position dans laquelle
ils sont ajoutés à la structure. Pour cette raison, on dit qu'ils sont des types ordonnés.
Comme cela prête parfois à confusion, nous allons le souligner. Ici, l'ordre n'est pas
cela signifie qu'en ajoutant des éléments, ceux-ci se réorganisent (par ex. numériquement
te o alfabétiquement). Cela fait simplement référence au fait qu'ils conservent l'ordre dans lequel
son ajoutés, c'est-à-dire leur ordre positionnel.
[Link]
Nous commençons avec cette structure de données séquentielle et mutable (nous pouvons
accéder à ses composants et les modifier par le biais de ses propres méthodes).
En Python, les listes sont probablement le type composé le plus utilisé.
en raison de sa polyvalence et de sa simplicité. Une liste est une séquence ordonnée d'éléments.
Mentos. Contrairement aux vecteurs ou tableaux d'autres langages, dans une liste il y a
ils peuvent mélanger des éléments de types différents sans problème. Bien que ce soit habituel
est-ce que tous les éléments ont le même type.
La façon courante de définir une liste est d'inclure les éléments séparés par
des virgules entre une paire de crochets.
6
STRUCTURES DE DONNÉES EN PYTHON
Exemples de listes
imprimer(elemento)
Ici il y a
['listas', 'anidadas']
[1, 2]
Pour accéder aux éléments d'une liste par leur index ou position, nous mettons le
indice entre crochets aussi.
7
STRUCTURES DE DONNÉES EN PYTHON
Si nous voulons obtenir la longueur d'une liste (le nombre d'éléments qui con-
nous devons simplement utiliser la fonction len().
Longueur de la liste
len(lista_nums)
# Resultado: 6
len(listes_imbriquées)
# Resultado: 3
Sélectionner un élément
# Résultat : 4
# Resultado: 4
8
STRUCTURES DE DONNÉES EN PYTHON
Si nous utilisons des indices négatifs, nous commençons à compter depuis la fin
# Resultado: 4
# Résultat : 1
Pour que vous compreniez mieux comment fonctionnent les indices pour accéder à un
élément, imagine que nous avons la liste[ 'A', 'B', 'C', 'D', 'E', 'F' ].
La figure suivante montre à quelle position référence un indice positif ou un
indice négatif.
Au lieu de voir les indices "pointant" vers chaque élément, pensons que les ind...
ces marquent les positions entre les éléments de la séquence. Dans ce cas, l'indice
6 référence une position en dehors des limites de la liste et produirait une erreur.
Maintenant, il est plus facile de voir comment nous pouvons sélectionner une " tranche " d'éléments conti-
guos d'une liste. Nous indiquons l'indice ou la position de départ à partir de laquelle commencer
montre la sélection et la position finale jusqu'où nous voulons arriver, en les écrivant.
dans les crochets séparés par deux points (:). Dans les tranches, l'élément
le correspondant à la limite initiale est toujours inclus, mais l'élément à la limite
la finale est exclue.
9
STRUCTURES DE DONNÉES EN PYTHON
letras = ['A','B','C','D','E','F']
lettres[0:2]
lettres[2:5]
lettres[2:]
lettres[:4]
lettres[-2:]
letras[:-2]
letras[:2] + letras[2:]
10
STRUCTURES DE DONNÉS EN PYTHON
Comme nous l'avons mentionné en début de section, les listes sont mutables, c'est
dire, nous pouvons modifier le contenu des éléments d'une liste de si-
formes suivantes…
imprimer(lista_lenguajes)
lista_lenguajes[0] = "java"
imprimer(lista_lenguajes)
imprimer(lista_lenguajes)
lista_lenguajes[1:3] = []
print(lista_lenguajes)
['java', 'brainfuck']
# ou la vider complètement
lista_lenguajes[:] = []
imprimer(lista_lenguajes)
[]
Une autre façon de modifier sa valeur est par le biais de la concaténation (ou de la réplication) de
listes. C'est-à-dire que nous pouvons "ajouter" deux listes ou répliquer leur contenu.
11
STRUCTURES DE DONNÉES EN PYTHON
# concaténation
liste_1 + liste_2
3 * liste_1
Nous pouvons également extraire les éléments d'une liste et les attribuer à différents
variables de forme simple avec une seule instruction.
x, y, z = lista_2
imprimer(x)
imprimer(y)
imprimer(z)
Résultat
100
200
300
12
STRUCTURES DE DONNÉES EN PYTHON
Lorsque nous aurons besoin de réaliser des consultations ou de modifier les valeurs de celles-ci, dans
En Python, nous disposons de l'aide de certaines méthodes que nous pourrons utiliser dans
notre bénéfice. Voyons-les...
Ensuite, nous avons un ordre qui nous permet d'éliminer une valeur concrète à l'intérieur
d'une liste :
Ceci est différent de la méthode .pop(), qui renvoie une valeur. L'instruction du
il peut également être utilisé pour supprimer des sections d'une liste ou vider la liste complète.
supprimer a[0]
supprimer a[2:4]
del a[:]
# Resultado: []
13
STRUCTURES DE DONNÉES EN PYTHON
Ce n'était pas une blague quand nous te parlions des bienfaits des listes et leur
polyvalence, tu ne crois pas ? Voyons un exemple de chaque méthode de la liste que
tu viens de lire pour que tu restes encore plus avec son fonctionnement.
lista_1.append('d')
imprimer(lista_1)
ultimo_valor = lista_1.pop()
print(ultimo_valor)
imprimer(lista_1)
Résultat : d
lista_1.insert(0, 'e')
lista_1.insérer(2, 'c')
imprimer(lista_1)
14
STRUCTURES DE DONNÉES EN PYTHON
lista_1.index('b')
# Resultado: 3
lista_1.count('c')
# Resultado: 2
lista_1.remove('c')
print(lista_1)
lista_1.trier()
imprimer(lista_1)
lista_1.reverse()
imprimer(lista_1)
del liste_1[2]
print(lista_1)
lista_1.clear()
imprimer(lista_1)
# Resultado: []
15
STRUCTURES DE DONNÉES EN PYTHON
Imagine le cas habituel suivant. Vous avez une variable (appelons-la liste1) et la
vous initialisez avec des valeurs quelconques. Plus tard, peut-être après avoir fait plusieurs
calculs et opérations avec la première variable, vous devez créer une autre nouvelle variable
ble (disons liste2) et l'initialiser avec la même liste que la première a dans ce
moment. Donc, vous assignez la première variable à la dernière.
liste1 = [1, 2, 3]
lista2 = lista1
print(lista2)
# Resultado: [1, 2, 3]
lista1 == lista2
Vrai
Évidemment, après l'attribution, les deux variables ont la même valeur. Mais c'est
que, en réalité, n'ont pas seulement la même valeur, mais qui visent la même
contenu.
Les deux sont des noms ou des références à la même donnée, à la même liste, et non deux.
copies distinctes avec les mêmes valeurs (quelqu'un se souvient des pointeurs en C++ ?).
Une variable en Python n'est rien d'autre qu'un nom ou une référence à une valeur.
ou structure de données qui est stockée d'une certaine manière en mémoire. Dans
Python, l'opération d'assignation d'une variable à une autre ne copie pas le contenu,
si non, cela définit un nouveau nom ou une référence au même contenu qui va-
variable originale.
16
STRUCTURES DE DONNÉES EN PYTHON
Et qu'est-ce que cela implique ? Pense-y... Si nous modifions un élément dans la seconde va-
variable, que se passe-t-il avec la première ? Comme les deux variables ne sont rien de plus que
# Resultado: True
lista2[1] = 99
print(lista1)
lista2 = [7, 8, 9]
17
STRUCTURES DE DONNÉES EN PYTHON
Lorsqu'il s'agit de travailler avec des structures de données mutables (comme les listes), il faut
Tu dois tenir tout cela en compte pour éviter de modifier accidentellement le contenu.
donner à une variable en manipulant une seconde.
Si vous avez besoin d'une copie identique mais indépendante d'une liste, vous pouvez utiliser le
métodocopy().
lista1 = [1, 2, 3]
# Avec .copy() vous créez une nouvelle liste, copie exacte de l'originale,
lista2 = [Link]()
Comme tu le vois, tu disposes d'un large éventail de méthodes pour te faciliter la vie
plus simple l'heure de travailler avec des listes. Passons à la structure suivante-
ra de données, qui te plaira aussi, mais d'une autre manière.
18
STRUCTURES DE DONNÉES EN PYTHON
[Link]
Les tuples sont un type de données similaire aux listes. Comme elles, les tuples sont
formées par une séquence d'éléments ordonnés. Les différences princi-
pales son deux :
D'un point de vue syntaxique, ils sont définis en utilisant des parenthèses.
lieu de crochets (c'est pourquoi il est facile de se tromper en les déclarant).
Que voulons-nous dire par immuables ? Eh bien, une fois que vous en avez créé un...
pla définissant ses éléments, vous ne pouvez plus modifier les valeurs qu'il contient.
Voyons un exemple de tuple pour que vous compreniez mieux cette structure
de données.
#!/usr/bin/python
#‐*‐codage: utf‐8‐*‐
nous pouvons utiliser des tuples comme éléments imbriqués dans un autre tuple
imprimer(mano)
print(mano[0])
19
STRUCTURES DE DONNÉES EN PYTHON
print(mano[1])
imprimer(joueur)
En réalité, Python nous permet de définir un tuple sans utiliser les parenthèses au
la créer. C'est-à-dire, en mettant simplement les éléments séparés par des virgules.
De toute façon, nous te recommandons d'utiliser toujours les parenthèses. Pour commencer,
parce qu'ainsi tu mets en évidence qu'il s'agit d'un tuple et tu comprends plus facilement ton code. Et dés-
puisque lorsque vous utilisez des tuples imbriqués ou des expressions plus complexes pour
définir les éléments, tu devras inclure les parenthèses obligatoirement.
De plus, il existe deux cas spéciaux de création de tuples : le tuple vide et le tuple
d'un seul élément. Les tuples vides se créent avec une paire de parenthèses
vide, sans aucun élément à l'intérieur.
20
STRUCTURES DE DONNÉES EN PYTHON
Pour créer un tuple avec un seul élément, nous l'entourons de parenthèses, pe-
il est nécessaire d'ajouter une virgule juste derrière l'élément et avant la fermeture de
parenthèses. Ça semble étrange, mais les parenthèses servent aussi à "encapsuler"
lar" une expression ([Link].(3 * 4)), Python a besoin d'un indice pour distinguer si
nous voulons construire un tuple avec une seule valeur ou non.
# Nous créons le tuple vide avec une paire de parenthèses vides, sans
aucun
élément
()
print(tupla_vacia)
()
tupla_un_elemento = (1,)
print(tupla_un_elemento)
# Résultat : (1,)
tupla = ("hola", 20, [1, 2, 3]) # tupla heterogénea (varios tipos de datos).
21
STRUCTURES DE DONNÉES EN PYTHON
Si tu te souviens, quand nous avons présenté les chaînes de caractères dans une unité
auparavant, nous avons vu que nous pouvions extraire un élément en utilisant un indice entre crochets
achetez, et que nous pouvions également sélectionner une " tranche ", ou concaténer des chaînes, ou
répliquer une chaîne plusieurs fois...
Tu as déjà appris qu'en Python, nous avons les types liste, tuple et chaîne de caractères.
et ce sont des types séquentiels, c'est-à-dire qu'ils sont des collections ordonnées d'éléments.
Eh bien, laissons maintenant les séquences. En Python, nous avons aussi des types com-
postes de données qui ne sont pas triés. C'est-à-dire que leurs éléments ne con-
servir l'ordre dans lequel ils sont placés.
Le type composé non ordonné le plus basique est l'ensemble (ou jeu de données)
Un ensemble est une collection non ordonnée d'éléments, et où
De plus, il ne peut y avoir d'éléments répétés. Un ensemble est modifiable.
Nous pouvons supprimer ou ajouter de nouveaux éléments, tant qu'ils ne sont pas déjà inclus.
dos dans l'ensemble.
L'utilité de ce type vient justement lorsque nous devons contrôler des éléments.
éléments dupliqués ou savoir si un élément a déjà été inclus (appartient) à un con-
ensemble, peu importe la position.
22
STRUCTURES DE DONNÉES EN PYTHON
Pour créer un ensemble, nous écrivons les éléments entre une paire d'accolades et séparons
joyeux par des virgules. Si nous voulons créer un ensemble vide, nous utiliserons la fonction
set(), et non une paire de accolades vides ({}) comme vous pourriez le penser. Un peu plus ade-
l'ante te montrera qu'une paire de clés vides crée un dictionnaire vide.
Nous allons voir un petit exemple de campeur, qui va sûrement te laisser les choses.
beaucoup plus claires avec les ensembles de données :
#!/usr/bin/python
#‐*‐codage: utf‐8‐*‐
set()
ne apparaît pas dupliquée - nous savons déjà que nous apportons de l'eau
en_mochila.ajouter("couteau")
imprimer(en_mochila)
bocadillo
23
STRUCTURES DE DONNÉES EN PYTHON
en_mochila.jeter("cuerda")
imprimer(en_mochila)
Dans l'utilisation des jeux de données, nous disposons également des opérations habituelles
entre ensembles : union, différence, intersection, etc...
a = {1, 2, 3, 5, 8}
b = {1, 2, 4, 8, 16}
union de a et b
[Link](b)
# Nous pouvons aussi le faire ainsi : éléments qui sont dans a ou dans b
a|b
{1, 2, 3, 4, 5, 8, 16}
intersection de a et b
[Link](b)
{1, 2, 8}
# nous pouvons aussi le faire ainsi : éléments qui sont dans a et dans b
a&b
{1, 2, 8}
différence entre a et b
[Link]érence(b)
{3, 5}
24
STRUCTURES DE DONNÉES EN PYTHON
# nous pouvons aussi le faire ainsi : éléments qui sont dans a mais pas
sont dans
a‐b
{3, 5}
[Link]érence_symétrique(b)
{3, 4, 5, 16}
# nous pouvons aussi le faire ainsi : des éléments qui sont exclusivement
a^b
{3, 4, 5, 16}
s = {1, 2}
# s est un sous-ensemble de a ?
s.est_un_sous_ensemble(a)
Vrai
s <= a
Vrai
a.est_un_sur_ensemble(s)
# Resultado: True
a >= s
Vrai
25
STRUCTURES DE DONNÉES EN PYTHON
Comme vous pouvez le constater, le nombre d'actions que nous pouvons réaliser auxdag-
tasetes brutaux, ce qui les positionne comme une façon géniale d'effectuer des tâches
mathématiques avec des ensembles de données.
[Link]
Un autre type de donnée utile inclus nativement dans Python est le dictionnaire. Les
Les dictionnaires se trouvent parfois dans d'autres langages comme "mémoires associatives".
tivas" ou "arrangements associatifs". Contrairement aux séquences, qui sont indexées
par l'intermédiaire d'une plage numérique, les dictionnaires sont indexés avec des clés, qui peuvent-
il voit n'importe quel type immuable ; les chaînes et les nombres peuvent toujours être
clés. Les tuples peuvent être utilisés comme clés s'ils ne contiennent que des chaînes,
nombres ou tuples ; si un tuple contient tout objet mutable directement ou indirectement
rectement, il ne peut pas être utilisé comme clé. Vous ne pouvez pas utiliser des listes comme clés.
puisque les listes peuvent être modifiées en utilisant l'assignation par index, assignation
par section, ou des méthodes comme append() et extend(). En résumé, une clé
doit être formé d'un élément immuable, ne peut pas changer une
a été ajouté avec sa valeur au dictionnaire.
26
STRUCTURES DE DONNÉES EN PYTHON
Il est également possible de supprimer une paire clé:valeur. Si vous utilisez une clé qui existe déjà.
est en cours d'utilisation pour stocker une valeur, la valeur qui était associée à cette clé a été
perdre. Extraire une valeur en utilisant une clé inexistante nous donnera un joli
message d'erreur, comme il se doit.
extension['guido'] = 4127
imprimer(extension)
extension['juan']
# Resultado: 4098
supprimer l'extension['pedro']
extension['ivan'] = 4127
imprimer(extension)
imprimer([Link]és())
print('guido' in extension)
Vrai
27
STRUCTURES DE DONNÉES EN PYTHON
La méthode keys() d'un dictionnaire renvoie une liste de toutes les clés dans
utilisation de ce dictionnaire, mais dans un ordre arbitraire (si tu veux qu'il soit ordonné, sim-
implémentez utilisez la méthode sort() sur la liste des clés). Pour vérifier si une
la clé est dans le dictionnaire, utilise le mot cléin.
Nous avons différentes façons d'itérer sur un dictionnaire. Nous pouvons itérer sur les
clés du dictionnaire de manière directe. Nous pouvons également itérer sur les paires-
jas (clé, valeur).
5556033
5556051
5556056
5556033
5556051
5556056
print(telefono) # Résultat :
# 5556033
# 5556051
# 5556056
28
STRUCTURES DE DONNÉES EN PYTHON
Vous pouvez continuer à explorer par vous-même d'autres utilisations des dictionnaires, comme
dépôt d'information, par exemple… Te rappellent-ils la sémantique de la langue-
je JSON?
Maintenant que nous avons vu les principaux types composés de données qu'offre
Python de forma nativa, nous allons vous présenter un type d'expressions très utiles
et puissants pour créer et travailler avec ces structures de données.
Les définitions par compréhension sont une manière très concise et simple de générer.
rar des collections de données de manière automatique. Elles sont principalement utilisées avec des listes,
mais ils sont applicables à tous les types de composés en faisant les ajustements nécessaires.
Les définitions par compréhension sont des expressions qui permettent de construire une
nouvelle collection la définissant à partir d'une autre collection de départ, une expre-
sion génératrice des nouveaux éléments à inclure et un prédicat ou une condition.
29
STRUCTURES DE DONNÉES EN PYTHON
Écrit comme ça, peut-être que ça te semble complexe, mais tu verras que c'est très simple. Le
Il vaut mieux commencer par un cas d'exemple. Imaginez que nous voulons sauvegarder
Dans une liste, la table de multiplication de 7. Une façon de le faire avec ce que tu as.
appris jusqu'à présent serait par le biais d'une boucle.
tabla_del_7 = []
table de multiplication de 7
tabla_del_7.append(7 * x)
imprimer(tableau_du_7)
# Resultado: [0, 7, 14, 21, 28, 35, 42, 49, 56, 63]
Nous avons dû créer une variable avec une liste vide au début, et ensuite
utiliser une boucle for pour itérer sur les valeurs de 0 à 9 et les modifier à chaque
je passe la liste, pour ajouter chaque valeur de la table de multiplication.
Ce n'est pas que ce soit un code très compliqué ni long. Mais Python nous permet
faire cela de manière plus simple et plus brève.
imprimer(tableau_du_7)
30
STRUCTURES DE DONNÉES EN PYTHON
Le domaine des valeurs d'entrée peut être n'importe quel objet ou expression itérable.
Nous pouvons également combiner deux ou plusieurs clauses avec leurs domaines de en-
trada pour construire la collection.
Cette expression est évaluée pour toutes les combinaisons de valeurs de x et y. Si cela
tu penses, c'est comme si tu avais deux boucles for imbriquées. Nous allons inclure dans chaque
élément généré les valeurs dexey, ainsi ça sera plus clair.
resultado
[(1, 4, 4),
(1, 5, 5)
(1, 6, 6)
(2, 4, 8)
(2, 5, 10)
(2, 6, 12)
(3, 4, 12)
(3, 5, 15)
(3, 6, 18)]
31
STRUCTURES DE DONNÉES EN PYTHON
Dans ce cas, nous avons fait en sorte que l'expression génératrice renvoie un tuple avec
les valeurs dex, yy dex * y. Toute expression peut être utilisée, tout le
complexe qu'il soit nécessaire, tant qu'il renvoie un élément valide.
{1, 3, 5, 7, 9}
Si nous voulons une tuple, il ne suffira pas d'utiliser des parenthèses. Nous devrons
que utiliser le constructortuple()
# Resultado: (0, 1, 2, 3, 4)
imprimer(dict_tabla_7[3])
# Resultado: 21
32
STRUCTURES DE DONNÉES EN PYTHON
1.5.GÉNÉRATEURS
Un couple de paragraphes plus haut, nous venons de voir que si nous voulons créer un
pladefinie par compréhension ne suffit pas à remplacer les crochets par des parenthèses
thèse, nous devons utiliser le constructeur tuple().
Disons qu'un générateur est un objet qui s'occupe de faire les calculs
pour générer les valeurs résultantes une à une selon nos besoins et les
allons demander, en itérant sur la collection d'entrée, au lieu de construire
la séquence entière d'un coup.
L'utilité de ce mécanisme est qu'il permet d'économiser de l'espace mémoire (ne pas
nous devons stocker tous les résultats) et il s'avère plus efficace dans les ca-
sos dans lesquels nous n'avons pas besoin de la séquence résultat complète en une seule fois, par
exemple, si nous voulons itérer les valeurs dans une boucle.
imprimer(gen_tabla_7)
33
STRUCTURES DE DONNÉES EN PYTHON
imprimer(v)
14
21
28
35
42
49
56
63
34
STRUCTURES DE DONNÉES EN PYTHON
Si nous avons un générateur et que nous voulons extraire ses valeurs dans une liste, nous pouvons
utiliser le constructeur list.
# Et nous voulons transférer tous ses éléments dans une liste, nous utilisons 'list'
list(gen_tabla_3)
imprimer(lista_tabla_3)
autre_liste_table_3 = liste(gen_table_3)
print(otra_lista_tabla_3)
# Resultado: []
Profite de tout ce que les générateurs te offrent pour élargir tes compétences comme
programmeur Python.
35
STRUCTURES DE DONNÉES EN PYTHON
QU'AS-TU APPRIS?
Nous avons vu tout au long de l'unité qu'il existe 3 structures de données impor-
tantes, sans compter les ensembles (datasets) et les chaînes (strings) :
Tuples.
Listes.
Dictionnaires.
Ce qui est commun à toutes elles, c'est que nous pouvons sélectionner des éléments indépendamment.
dents de chacune d'elles pour travailler. C'est sa flexibilité au moment de traiter les
données qui contiennent ce qui confère de la polyvalence à ces structures.
Pratiquez avec les exercices que nous vous proposons et les exemples de l'unité pour
comprendre parfaitement son fonctionnement.
37
STRUCTURES DE DONNÉES EN PYTHON
BIBLIOGRAPHIE
39