# Liste d'entiers
= [22, 29, 35, 56]
a a
Listes et Dictionnaires
Avant de commencer
- Téléchargez ce notebook Jupyter
- Connectez-vous au Jupyter ENSAI avec id et mot de passe
- ou une autre plate-forme (SSPCloud, Jupyter Lab, Google Colab, Kaggle…)
- Importez le fichier .ipynb
1 Conteneurs
Il existe plusieurs structures de données en Python :
- Listes (list) : collection ordonnée et modifiable d’éléments
- Dictionnaires (dict) : collection non ordonnée de paires clé-valeur
- Ensembles (set) : collection non ordonnée d’éléments uniques
- Tuples (tuple) : collection ordonnée et immuable d’éléments
Nous allons ici nous concentrer sur les deux structures les plus courantes : les listes et les dictionnaires
2 Listes
Propriétés des listes Python :
- Indexation : Les éléments d’une liste sont indexés, ce qui signifie qu’ils peuvent être accédés en utilisant leur position dans la liste. L’index du premier élément est 0, et l’index du dernier élément est len(liste) - 1.
- Mutable : Les listes sont des objets mutables, ce qui signifie que vous pouvez modifier leurs éléments. Vous pouvez ajouter, supprimer ou modifier des éléments.
- Hétérogénéité : Les listes peuvent contenir des éléments de différents types de données : entiers, chaînes de caractères, booléens, voire d’autres listes.
- Longueur variable : Les listes peuvent contenir un nombre variable d’éléments. Elles peuvent être vides (sans éléments) ou contenir un nombre illimité d’éléments.
2.1 Créer une liste
type(a)
# Liste mixte
= ["bonjour", 20, True]
b print(b)
# Concaténation
+ b a
# Répétition
* 2 a
Il existe de nombreuses autres possibilités pour créer des listes.
list(range(1, 7))
for x in range(1, 7)] [x
# En séparant une chaîne de caractères
= "bleu;blanc;rouge;vert;jaune"
c ";") c.split(
2.2 Méthodes utiles
# Nombre d'éléments
len(a)
# Premier élément
0] a[
# Dernier élément
-1] a[
# Tous les éléments à partir de la position 1
1:] a[
# Tester si une valeur appartient à une liste
22 in a
# Trouver la position d'un élément
29) a.index(
# Inverser une liste (sans modifier la liste d'origine)
print("a[::-1] : " + str(a[::-1]))
print("a : " + str(a))
# Inverser une liste (ici l'inversion est sauvegardée dans la variable **a** )
a.reverse() a
# Trier une liste (sans modifier la liste d'origine)
sorted(a)
# Order décroissant
sorted(a, reverse=True)
# Trier une liste (en sauvegardant la modification dans la variable **a**)
print("Avant : " + str(a))
a.sort()print("Après : " + str(a))
2.3 Ajouter, modifier et supprimer
# Ajouter à la fin
44)
a.append( a
# Insérer à une position précise
2, 88)
a.insert( a
# Modifier
0] = 99
a[ a
# Supprimer par position
3)
a.pop( a
# Supprimer par valeur
44)
a.remove( a
2.4 Copier une liste
Observez, puis exécutez le code ci-dessous, il contient les instructions suivantes :
- création de la variable liste
- création de la variable copie
- suppression du dernier élément de copie
- affichage de liste
= [1, 2, 3, 4]
liste = liste
liste2
liste2.pop() liste
Nous pourrions nous attendre à ce que la variable liste ne soit pas modifiée et affiche [1, 2, 3, 4]
.
Pourtant la variable liste2 n’est pas une copie de liste, c’est simplement une autre manière d’appeler la même liste.
# Pour créer une vraie copie qui sera distinct de l'original
= list(liste)
copie 9)
copie.append( liste, copie
# Autre possibilité pour copier
= liste.copy()
cp 8)
cp.append( liste, cp
3 Dictionnaires
Propriétés importantes d’un dictionnaire en Python :
- Indexation par clé : Les éléments d’un dictionnaire sont indexés par des clés plutôt que par des positions. Chaque clé doit être unique dans le dictionnaire, et elle est associée à une valeur correspondante. La recherche d’une valeur associée à une clé est très rapide.
- Mutable : Les dictionnaires sont des objets mutables, ce qui signifie que vous pouvez ajouter, supprimer ou modifier des éléments du dictionnaire après sa création.
- Hétérogénéité : Les dictionnaires peuvent contenir des paires clé-valeur avec des types de données différents. Les clés peuvent être de types immuables tels que les chaînes de caractères, les entiers… Les valeurs peuvent être de n’importe quel type de données valide en Python.
- Longueur variable : Les dictionnaires peuvent contenir un nombre variable de paires clé-valeur. Ils peuvent être vides (sans paires clé-valeur) ou contenir un nombre illimité de paires.
- Non ordonné : Contrairement aux listes, les éléments d’un dictionnaire n’ont pas d’ordre défini. L’ordre dans lequel les paires clé-valeur sont stockées n’est pas garanti et peut changer lors des opérations de modification du dictionnaire.
3.1 Créer un dictionnaire
= {'sucre': '100g', 'poire': 2, 'lait': '1L', 'sel': True}
ingredients ingredients
type(ingredients)
# Nombre d'éléments
len(ingredients)
# Recherche par clé
'lait'] ingredients[
# Recherche par clé - autre possibilité
'lait') ingredients.get(
3.2 Ajouter, modifier et supprimer
# Ajouter un élément
'fraise'] = '200g'
ingredients[ ingredients
# Modifier
'sucre'] = '35g'
ingredients[ ingredients
# Supprimer
'lait')
ingredients.pop( ingredients
3.3 Méthodes utiles
# Liste des clés
list(ingredients.keys()) # idem : list(ingredients)
# Liste des valeurs
list(ingredients.values())
# Liste des items (liste de tuples)
list(ingredients.items())
4 Les types « vide »
Maintenant que nous avons vu les listes et les dictionnaires, nous pouvons parler des types vides.
Par exemple, il est possible de créer :
- une variable qui ne contient rien :
None
- une liste vide
[]
- un dictionnaire vide
{}
= None
x type(x)
= []
y type(y)
= {}
z type(z)
5 Exercices
5.1 Exercice 1
En partant de la liste notes = ["do", "re", "re", "re", "fa", "sol", "solsi", "la"]
, ajoutez, supprimez et modifiez des éléments pour qu’elle contienne les notes de musique “do re mi fa sol la si” dans le bon ordre.
# Testez votre réponse dans cette cellule
5.2 Exercice 2
Proposez deux méthodes pour inverser la liste ["un", "deux", "trois", "quatre"]
. Quelle est la différence majeure entre les deux méthodes ?
# Testez votre réponse dans cette cellule
5.3 Exercice 3
Testez le comportement de la méthode pop sur la liste des entiers de 1 à 9.
Par exemple, testez pop() sans paramètres ou encore pop(-1).
# Testez votre réponse dans cette cellule
5.4 Exercice 4
Testez le comportement des méthodes min et max sur :
- sur une liste composée uniquement d’objets numériques (
int
etfloat
) ; - sur une liste composée uniquement de chaînes de caractères ;
- sur une liste composée d’un mélange d’objets numériques et textuels.
# Testez votre réponse dans cette cellule
5.5 Exercice 5
Essayer de créer une liste vide puis vérifiez son type.
Quel intérêt cela pourrait-il avoir ?
# Testez votre réponse dans cette cellule
Exercice Soit le dictionnaire suivant : animaux = {'chats': 5, 'chiens': 12}
Que vont retourner les tests d’appartenance suivants ? Vérifiez vos prédictions.
'chats' in animaux.keys()
'chats' in animaux.values()
'chats' in animaux
# Testez votre réponse dans cette cellule
5.6 Exercice 6
Soit le dictionnaire défini dans la cellule ci-dessous.
Affichez à l’aide d’opérations print :
- la liste des noms des différentes classes
- la note de Miranda en histoire
- la liste des notes obtenues par Hypolyte
- la liste des noms des élèves de la 6emeB
- la liste des matières enseignées en 6eme A
- la liste de toutes les matières enseignées
- la liste des notes obtenues par les filles des deux classes
= {
resultats "6emeA": {"Miranda" : {"notes": {"physique": 16, "histoire": 12}},
"Celestin": {"notes": {"physique": "absent", "histoire": 18}}
},"6emeB": {"Hypolyte": {"notes": {"maths": 11, "anglais": 0}},
"Josephine": {"notes": {"maths": 16, "anglais": 20}}
} }
# Testez votre réponse dans cette cellule
5.7 Exercice 7
À l’aide d’un dictionnaire, comptez puis affichez le nombre d’occurences de chaque caractère dans la phrase suivante :
Je compte le nombre d'occurences de chaque caractère de la phrase courante.
Astuce : au préalable, faites un test sur une chaine plus petite.
# Testez votre réponse dans cette cellule
5.8 Exercice 8
Nettoyer cette liste pour retirer tous les doublons et ne conserver qu’une seule occurence de chaque fruit :
fruits = ['pomme', 'banane', 'orange', 'fraise', 'citron', 'fraise', 'banane', 'orange', 'banane', 'pomme', 'fraise']
Indice : utiliser les set
# Testez votre réponse dans cette cellule