Chapter 3 Introduction à Python 3

3.1 Listes

3.1.1 Définition d’une liste

Une liste est une variable python définie à partir d’une séquence de valeurs (numériques et/ ou en caractères) indicées, spécifiées à l’intérieur de crochets et séparées par des virgules. Ce qui signifie qu’une liste est nécessairement un ensemble de valeurs (au moins une) même si on peut définir une liste vide.

Les propriétés des listes sont :

  • Elles sont de taille variable, donc on peut leur supprimer ou ajouter des valeurs

  • Elles sont modifiables, les valeurs peuvent être modifiées

  • Elles sont ordonnées, chaque valeur de la liste peut être identifiée à travers son indice c’est-à-dire sa position dans l’ordre des valeurs

  • Les types des valeurs contenues dans une liste sont totalement arbitraires : nombres, chaînes de caractères, des listes etc.

  • Elles peuvent être imbriquées, une liste peut en contenir une autre.

Pour créer une liste on utilise les crochets entre lesquels on met les valeurs souhaitées :

my_list = [6, 23, 'LeBron']
type(my_list)
## <class 'list'>

On peut aussi utiliser la fonction list()

my_other_list = list("James")
type(my_other_list)
## <class 'list'>

3.1.2 Accès aux éléments d’une liste

Pour accéder aux éléments d’une liste, on utilise du slicing. Le slicing consiste à extraire des éléments, une partie de la liste à travers leurs indices (positions dans la liste).

Il est importer de noter que sur python, la numérotation commence par indice 0.

3.1.2.1 Renvoyer l’indice d’un élément

Pour connaitre l’indice (la position) d’un élément, il suffit d’utiliser la fonction index().

Syntaxe : nom_de_ma_liste.index(valeur_element)

ma_liste = ["Hey", 5, ["A", "B", 1, "2"], 6, "Hello"] # On définit d'abord notre liste
print("ma_liste.index(6) renvoie l'index de l'élément 6 qui est : ", ma_liste.index(6))
## ma_liste.index(6) renvoie l'index de l'élément 6 qui est :  3

3.1.2.2 Indiçage d’une liste

Dans cette partie, on va voir comment en pratique on va utiliser les indices pour faire du slicing. On peut faire de l’indicage de plusieurs manières :

  • Si on veut extraire un élément : nom_de_ma_liste[numero_element]
print("ma_liste[0] renvoie le premier élèment qui est : ", ma_liste[0])
## ma_liste[0] renvoie le premier élèment qui est :  Hey
print("ma_liste[2] renvoie le 3e élèment qui est : ", ma_liste[2])
## ma_liste[2] renvoie le 3e élèment qui est :  ['A', 'B', 1, '2']

On peut aussi compter à partir de la fin de la liste, en effet il se peut que la liste soit trop longue et que ce soit plus facile de se repérer en partant de la fin.

Cette fois ci c’est la même syntaxe sauf que (1) on ne compte plus à partir de 0 mais de 1 et (2) on met un signe négatif pour dire qu’on compte à partir de la droite.

print("ma_liste[-2] renvoie le 2e élèment à partir de la fin qui est : ", ma_liste[-2])
## ma_liste[-2] renvoie le 2e élèment à partir de la fin qui est :  6
  • Si on veut extraire une partie de la liste : nom_de_ma_liste[debut : fin], en sachant que la borne supérieure est exclue (comme avec la fonction range() vue dans la chapitre 2)
print("ma_liste[0:2] renvoie une liste contenant les éléments d'indices 0 à 1 qui est : ", ma_liste[0:2])
## ma_liste[0:2] renvoie une liste contenant les éléments d'indices 0 à 1 qui est :  ['Hey', 5]
print("ma_liste[:2] renvoie une liste contenant tous les éléments jusqu'à l'élément d'indice 1 qui est : ", ma_liste[:2])
## ma_liste[:2] renvoie une liste contenant tous les éléments jusqu'à l'élément d'indice 1 qui est :  ['Hey', 5]
print("ma_liste[1:4] renvoie une liste contenant les éléments d'indice 1 à 3  qui est : ", ma_liste[1:4])
## ma_liste[1:4] renvoie une liste contenant les éléments d'indice 1 à 3  qui est :  [5, ['A', 'B', 1, '2'], 6]
print("ma_liste[3:] renvoie une liste contenant les éléments d'indice 3 à la fin qui est : ", ma_liste[3:])
## ma_liste[3:] renvoie une liste contenant les éléments d'indice 3 à la fin qui est :  [6, 'Hello']
print("ma_liste[-4:-2] renvoie une liste contenant le 4e et le 3e élements à partir de la fin : ", ma_liste[-4:-2])
## ma_liste[-4:-2] renvoie une liste contenant le 4e et le 3e élements à partir de la fin :  [5, ['A', 'B', 1, '2']]
print("ma_liste[:] renvoie toute la liste : ", ma_liste[:])
## ma_liste[:] renvoie toute la liste :  ['Hey', 5, ['A', 'B', 1, '2'], 6, 'Hello']
  • Si on veut faire du slicing à plusieurs nouveaux, il s’agit d’accéder aux éléments d’une sous-liste contenue dans notre liste de base : nom_de_ma_liste[indice_sous_liste][indice_element_sous_liste]
print("ma_liste[2][1] renvoie le 2e élement de la sous_liste située à la 3e position qui est : ", ma_liste[2][1])
## ma_liste[2][1] renvoie le 2e élement de la sous_liste située à la 3e position qui est :  B

3.1.2.3 Déterminer le nombre d’éléments d’une liste

La détermination du nombre d’éléments d’une liste se fait avec la fonction len().

Syntaxe : len(nom_de_ma_liste)

print(" len(ma_liste) renvoie le nombre d’éléments de la liste qui est : ", len(ma_liste))
##  len(ma_liste) renvoie le nombre d’éléments de la liste qui est :  5

3.1.2.4 Tester l’existance d’un élement

Pour tester l’existence d’un élément dans une liste, on utilise le mot clé in.

Syntaxe : element in nom_de_ma_liste. Si l’élément est dans la liste, ceci renvoie True et False sinon.

print(" 'Hello' in ma_liste : ", 'Hello' in ma_liste)
##  'Hello' in ma_liste :  True
print(" 'C' in ma_liste[2] : ", 'C' in ma_liste[2])
##  'C' in ma_liste[2] :  False

3.1.2.5 Compter le nombre d’occurences d’un élément

Une liste pouvant contenir plusieurs fois les mêmes éléments, on peut être amené à vouloir compter le nombre de fois que chaque élément est présent dans la liste. Ceci se fait en utilisant la fonction count().

Syntaxe : nom_de_ma_liste.count(element).

# Liste contenant l'ordre des buts lors de la remontada BAR-PSG de 2016
remontada = ["Suarez", "Kurzawa CSC", "Messi", "Cavani", "Neymar", "Neymar", "Roberto"] 
print(" remontada.count('Messi') renvoie le nombre de buts de Messi : ",remontada.count('Messi'))
##  remontada.count('Messi') renvoie le nombre de buts de Messi :  1
print(" remontada.count('Neymar') renvoie le nombre de buts de Neymar : ",remontada.count('Neymar'))
##  remontada.count('Neymar') renvoie le nombre de buts de Neymar :  2

3.1.3 Modification d’une liste

3.1.3.1 Opérations élémentaires

On peut aussi démultiplier une liste, en la rendant n fois plus longue.

print("ma_liste*2 multiplie la taille liste par 2 : ", ma_liste*2)
## ma_liste*2 multiplie la taille liste par 2 :  ['Hey', 5, ['A', 'B', 1, '2'], 6, 'Hello', 'Hey', 5, ['A', 'B', 1, '2'], 6, 'Hello']

On peut aussi sommer des listes en les fusionnant à travers une addition.

list_numerique = [2, 3, 5, 7]

print("La fusion de list_numerique et de ma_liste est donnée par list_numerique + ma_liste : \n" , list_numerique + ma_liste)
## La fusion de list_numerique et de ma_liste est donnée par list_numerique + ma_liste : 
##  [2, 3, 5, 7, 'Hey', 5, ['A', 'B', 1, '2'], 6, 'Hello']

3.1.3.2 Ajouter de nouveaux éléments

On peut aussi ajouter des éléments à notre liste initiale avec la fonction append().

Syntaxe : nom_de_ma_liste.append(new_element).

list_numerique.append(11)
print("list_numerique.append(11) permet d'ajouter la valeur 9 à la liste, ce qui nous donne : \n" , list_numerique)
## list_numerique.append(11) permet d'ajouter la valeur 9 à la liste, ce qui nous donne : 
##  [2, 3, 5, 7, 11]

La fonction append() permet d’ajouter un seul élément à la fois, pour en ajouter plusieurs d’un coup, on utilise extend()

Syntaxe : nom_de_ma_liste.extend([new_element_1, new_element_2 ,.., new_element_n]).

list_numerique.extend([13, 17, 19])

3.1.3.3 Supprimer des éléments d’une liste

Pour supprimer des éléments d’une liste, on a 2 choix :

  • Quand on connait sa position, son index : on utilise la fonction pop(index_element)

  • Quand on ne connait pas sa position : on utilise la fonction remove(element)`

print("La liste initiale est : ",  list_numerique)
## La liste initiale est :  [2, 3, 5, 7, 11, 13, 17, 19]
list_numerique.remove(11) # supprime la valeur 11 de la liste
print("la liste devient : ",  list_numerique)
## la liste devient :  [2, 3, 5, 7, 13, 17, 19]
list_numerique.pop(-1) # supprime la dernière valeur qui est le 19
## 19
print("la liste devient : ",  list_numerique)
## la liste devient :  [2, 3, 5, 7, 13, 17]

3.1.3.4 Modifier ou remplacer les éléments d’une liste

La modification des éléments d’une liste se fait à travers une assignation en passant par leur index.

 # On modifie cet élément en lui donnant la valeur -5
print("La liste initiale est : ",  list_numerique)
## La liste initiale est :  [2, 3, 5, 7, 13, 17]
list_numerique[2] = -5
print("la liste devient : ",  list_numerique)
## la liste devient :  [2, 3, -5, 7, 13, 17]

3.1.3.5 Trier une liste

Pour trier une liste, on utilise la fonction sort(). Cette fonction ne marche que si la liste est constituée uniquement de valeurs numériques ou de valeurs constituées de chaînes de caractères.

Syntaxe : nom_de_ma_liste.sort().

x = [ 12, 5, 4, 20, 3, 8, 9, 51]
x.sort() # tri croissant
print("On fait un tri croissant : ", x)
## On fait un tri croissant :  [3, 4, 5, 8, 9, 12, 20, 51]
x.sort(reverse=True) # tri décroissant
print("On fait un tri décroissant : ", x)
## On fait un tri décroissant :  [51, 20, 12, 9, 8, 5, 4, 3]

si le tri est effectué sur une liste contenant uniquement des chaînes de caractères, il est fait par ordre alphabétique.

y = ["chat", "chien", "oiseau", "poisson", "souris",
     "hamster", "lézard", "serpent", "araignée"]
    
y.sort() # tri croissant
print("On fait un tri croissant : ", y)
## On fait un tri croissant :  ['araignée', 'chat', 'chien', 'hamster', 'lézard', 'oiseau', 'poisson', 'serpent', 'souris']
y.sort(reverse=True) # tri décroissant
print("On fait un tri décroissant : ", y)
## On fait un tri décroissant :  ['souris', 'serpent', 'poisson', 'oiseau', 'lézard', 'hamster', 'chien', 'chat', 'araignée']

3.1.3.6 Copier une liste

Pour copier une liste, on a 2 manières : la copie superficielle ou la copie profonde.

  • Copie superficielle : elle construit une nouvelle liste puis insère dans cette liste des références aux objets trouvés dans l’originale, si vous modifiez une liste l’autre liste sera modifiée aussi.

Syntaxe : nom_nouvelle_liste = nom_ancienne_liste.copy().

y = [["chat", "chien", "oiseau"], "poisson", "souris",
     "hamster", "lézard", "serpent", "araignée"]
z = y.copy()    

print("Initialement")
## Initialement
print("y = ", y)
## y =  [['chat', 'chien', 'oiseau'], 'poisson', 'souris', 'hamster', 'lézard', 'serpent', 'araignée']
print("z = ", z)
## z =  [['chat', 'chien', 'oiseau'], 'poisson', 'souris', 'hamster', 'lézard', 'serpent', 'araignée']
z[0][0] = "Moustique" # On modifie un élement de la copie
print("Après modification")
## Après modification
print("y = ", y)
## y =  [['Moustique', 'chien', 'oiseau'], 'poisson', 'souris', 'hamster', 'lézard', 'serpent', 'araignée']
print("z = ", z)
## z =  [['Moustique', 'chien', 'oiseau'], 'poisson', 'souris', 'hamster', 'lézard', 'serpent', 'araignée']

On remarque que y et z sont tous les 2 modifiées alors qu’on agit que sur la copie qui est z. Ce ‘problème’ arrive lorsque l’on manipule des listes de liste. ELle n’est à utiliser que lorsque l’on a une liste simple (à une dimension).

  • Copie profonde : Pour remédier à ce « problème », on utiliser la fonction deepcopy du module copy. La copie profonde construit une nouvelle liste puis insère dans la liste des copies des objets trouvés dans la liste originale.
y = [["chat", "chien", "oiseau"], "poisson", "souris",
     "hamster", "lézard", "serpent", "araignée"]
     
import copy # on importe le module copy
z = copy.deepcopy(y)   

print("Initiallement")
## Initiallement
print("y = ", y)
## y =  [['chat', 'chien', 'oiseau'], 'poisson', 'souris', 'hamster', 'lézard', 'serpent', 'araignée']
print("z = ", z)
## z =  [['chat', 'chien', 'oiseau'], 'poisson', 'souris', 'hamster', 'lézard', 'serpent', 'araignée']
z[0][0] = "Moustique"
print("Après modification")
## Après modification
print("y = ", y)
## y =  [['chat', 'chien', 'oiseau'], 'poisson', 'souris', 'hamster', 'lézard', 'serpent', 'araignée']
print("z = ", z)
## z =  [['Moustique', 'chien', 'oiseau'], 'poisson', 'souris', 'hamster', 'lézard', 'serpent', 'araignée']

On voit que seul z est impacté et que y est resté intacte.

3.1.4 Autres fonctions appliquées aux listes

x = [ 12, 5, 4, 20, 3, 8, 9, 51]
print("La fonction max() affiche le maximum de la liste qui est : ", max(x))
## La fonction max() affiche le maximum de la liste qui est :  51
print("La fonction min() affiche le minimum de la liste qui est : ", min(x))
## La fonction min() affiche le minimum de la liste qui est :  3
print("La fonction sum() affiche la somme des éléments de la liste qui est : ", sum(x))
## La fonction sum() affiche la somme des éléments de la liste qui est :  112
print("La moyenne peut être obtenue par sum(x)/len(x) qui est :", sum(x)/len(x) )
## La moyenne peut être obtenue par sum(x)/len(x) qui est : 14.0

3.1.5 List comprehension

3.2 Tuples

3.2.1 Définition d’un tuple

A l’instar des objets listes, les objets tuples sont des séquences de valeurs (numériques et/ou en caractères) dont les éléments sont indiqués entre parenthèses (crochets pour les listes) et séparés par des virgules. A la différence des listes, les éléments d’un tuple sont indicés (accessibles par slicing) mais pas modifiables. Toutefois, il est possible d’extraire les éléments pour en créer d’autres objets.

Propriétés des tuples :

  • Les tuples sont des listes inaltérables : il est impossible de changer un tuple une fois qu’il a été créé: il est impossible d’ajouter/retirer des éléments

  • Les tuples sont ordonnés

  • Les tuples sont plus rapides que les listes

On peut créer un tuple en mettant les valeurs entre parenthèses ou sans

my_tuple = ("Kobe Bryant", "Lakers", 24)
type(my_tuple)
## <class 'tuple'>
my_second_tuple = "Kobe Bryant", "Lakers", 24
print(my_second_tuple)
## ('Kobe Bryant', 'Lakers', 24)

On peut aussi utiliser la fonction tuple()

my_third_tuple = tuple(range(1, 10, 2))
print(my_third_tuple)
## (1, 3, 5, 7, 9)

3.2.2 Renvoyer l’indice d’un élément

Comme pour les listes, on détermine l’indice d’un tuple avec la fonction index

mon_tuple = (10, "chat", True, 3.14)
print("mon_tuple.index(10) renvoie l'index de la valeur 10 qui est :", mon_tuple.index(10))
## mon_tuple.index(10) renvoie l'index de la valeur 10 qui est : 0

3.2.3 Indiçage d’un tuple

Le slicing d’un tuple aussi est fait de la même manière que pour celui d’une liste.

print("Valeur du tuple", mon_tuple)
## Valeur du tuple (10, 'chat', True, 3.14)
print("mon_tuple[2 :] renvoie tous éléments à partir de l’élément d’indice 2 qui donne : ", mon_tuple[2 :])
## mon_tuple[2 :] renvoie tous éléments à partir de l’élément d’indice 2 qui donne :  (True, 3.14)
print("mon_tuple[-2] renvoie l'avant dernier élément du tuple qui donne : ", mon_tuple[ -2])
## mon_tuple[-2] renvoie l'avant dernier élément du tuple qui donne :  True

3.3 Dictionnaires

3.3.1 Définition d’un dictionnaire

Un dictionnaire est une structure de données qui permet de stocker des paires clé-valeur, où chaque clé est associée à une valeur correspondante. On peut penser à un dictionnaire comme à un vrai dictionnaire dans lequel chaque mot est associé à une définition.

Les propriétés d’un dictionnaire sont :

  • Les dictionnaires ne sont pas ordonnés et les clés doivent être uniques et immuables, c’est-à-dire qu’on ne peut pas les modifier, tandis que les valeurs peuvent être n’importe quel objet Python

  • On accède aux éléments d’un dictionnaire par leur clé et non pas parleur position

  • Les dictionnaires ne supportent pas les opérations que l’on a vu précédemment sur les séquences.

  • On peut supprimer et modifier des paires clé-valeur dans un dictionnaire Python à tout moment

Pour créer un dictionnaire on utilise les accolades entre lesquelles on met les paires clé-valeur souhaitées :

cedeao_dict = {
          "Bénin": ["Béninois", "+229", "Porto-Novo", 12123200, "Patrice Talon"],
          "Burkina Faso": ["Burkinabè", "+226", "Ouagadougou", 20903278, "Roch Marc Christian Kaboré"],
          "Côte d'Ivoire": ["Ivoirien", "+225", "Yamoussoukro", 26896308, "Alassane Ouattara"],
          "Gambie": ["Gambien", "+220", "Banjul", 2347706, "Adama Barrow"],
          "Ghana": ["Ghanéen", "+233", "Accra", 31382960, "Nana Akufo-Addo"],
          "Guinée": ["Guinéen", "+224", "Conakry", 13132792, "Alpha Condé"],
          "Guinée-Bissau": ["Bissau-Guinéen", "+245", "Bissau", 1920922, "Umaro Sissoco Embaló"],
          "Liberia": ["Libérien", "+231", "Monrovia", 5057677, "George Weah"],
          "Mali": ["Malien", "+223", "Bamako", 20250833, "Assimi Goïta"],
          "Niger": ["Nigérien", "+227", "Niamey", 26089574, "Mohamed Bazoum"],
          "Nigeria": ["Nigérian", "+234", "Abuja", 211401000, "Muhammadu Buhari"],
          "Sénégal": ["Sénégalais", "+221", "Dakar", 16743927, "Macky Sall"],
          "Sierra Leone": ["Sierra-léonais", "+232", "Freetown", 7976985, "Julius Maada Bio"],
          "Togo": ["Togolais", "+228", "Lomé", 8278724, "Faure Gnassingbé"]
}

Dans ce dictionnaire, la clé correspond au nom du pays, et la valeur est une liste qui contient des informations (gentilé, indicateur téléphonique, capitale, population, Président) sur le pays.

Pour trouver toutes les clés ou valeurs d’un dictionnaire, on applique les fonctions nom_de_mon_dict.keys() et nom_de_mon_dict.values()

cedeao_dict.keys() 
## dict_keys(['Bénin', 'Burkina Faso', "Côte d'Ivoire", 'Gambie', 'Ghana', 'Guinée', 'Guinée-Bissau', 'Liberia', 'Mali', 'Niger', 'Nigeria', 'Sénégal', 'Sierra Leone', 'Togo'])
cedeao_dict.values() 
## dict_values([['Béninois', '+229', 'Porto-Novo', 12123200, 'Patrice Talon'], ['Burkinabè', '+226', 'Ouagadougou', 20903278, 'Roch Marc Christian Kaboré'], ['Ivoirien', '+225', 'Yamoussoukro', 26896308, 'Alassane Ouattara'], ['Gambien', '+220', 'Banjul', 2347706, 'Adama Barrow'], ['Ghanéen', '+233', 'Accra', 31382960, 'Nana Akufo-Addo'], ['Guinéen', '+224', 'Conakry', 13132792, 'Alpha Condé'], ['Bissau-Guinéen', '+245', 'Bissau', 1920922, 'Umaro Sissoco Embaló'], ['Libérien', '+231', 'Monrovia', 5057677, 'George Weah'], ['Malien', '+223', 'Bamako', 20250833, 'Assimi Goïta'], ['Nigérien', '+227', 'Niamey', 26089574, 'Mohamed Bazoum'], ['Nigérian', '+234', 'Abuja', 211401000, 'Muhammadu Buhari'], ['Sénégalais', '+221', 'Dakar', 16743927, 'Macky Sall'], ['Sierra-léonais', '+232', 'Freetown', 7976985, 'Julius Maada Bio'], ['Togolais', '+228', 'Lomé', 8278724, 'Faure Gnassingbé']])

3.3.2 Accès aux éléments d’un dictionnaire

3.3.2.1 Récupérer les clés ou valeurs d’un dictionnaire

Comme précisé plus tôt, l’accès aux valeurs d’un dictionnaire se faire à travers la clé, qu’elle est justement unique.

Syntaxe : nom_de_mon_dict[clé]

On va accéder aux valeurs du Sénégal

cedeao_dict["Sénégal"]
## ['Sénégalais', '+221', 'Dakar', 16743927, 'Macky Sall']

On peut aussi aller plus loin et accéder par exemple à la population de la Côte d’Ivoire

elements_civ = cedeao_dict["Côte d'Ivoire"] # On accède d'abord à toutes les valeurs 
print(f"""Les informations sur la CIV sont {elements_civ}""")
## Les informations sur la CIV sont ['Ivoirien', '+225', 'Yamoussoukro', 26896308, 'Alassane Ouattara']
population_civ = elements_civ[-2] # puis on va chercher la population qui est 
                                  # à la 2e position de la liste à partir de la droite
   
print(f"""La population de la CIV est de {population_civ} millions d'habitants.""")                   
## La population de la CIV est de 26896308 millions d'habitants.

3.3.2.2 Tester l’existance d’une clé

Pour tester si une clé est contenue dans un dictionnaire, on utilise la syntaxe suivante: cle in nom_de_mon_dict

"Mali" in cedeao_dict # On teste si la clé 'Mali' est dans le dictionnaire            
## True

3.3.3 Modification de dictionnaire

3.3.3.1 Ajout de clé-valeur à un dictionnaire

Pour ajouter une paire clé-valeur, on utilise la syntaxe suivante: nom_de_mon_dict[“nouvelle_clé”] = nouvelle_valeur

cedeao_dict["mozambique"] = ["Mozambicain", "+258", "Maputo", 31255435, "Filipe Nyusi"] 
print(cedeao_dict)
## {'Bénin': ['Béninois', '+229', 'Porto-Novo', 12123200, 'Patrice Talon'], 'Burkina Faso': ['Burkinabè', '+226', 'Ouagadougou', 20903278, 'Roch Marc Christian Kaboré'], "Côte d'Ivoire": ['Ivoirien', '+225', 'Yamoussoukro', 26896308, 'Alassane Ouattara'], 'Gambie': ['Gambien', '+220', 'Banjul', 2347706, 'Adama Barrow'], 'Ghana': ['Ghanéen', '+233', 'Accra', 31382960, 'Nana Akufo-Addo'], 'Guinée': ['Guinéen', '+224', 'Conakry', 13132792, 'Alpha Condé'], 'Guinée-Bissau': ['Bissau-Guinéen', '+245', 'Bissau', 1920922, 'Umaro Sissoco Embaló'], 'Liberia': ['Libérien', '+231', 'Monrovia', 5057677, 'George Weah'], 'Mali': ['Malien', '+223', 'Bamako', 20250833, 'Assimi Goïta'], 'Niger': ['Nigérien', '+227', 'Niamey', 26089574, 'Mohamed Bazoum'], 'Nigeria': ['Nigérian', '+234', 'Abuja', 211401000, 'Muhammadu Buhari'], 'Sénégal': ['Sénégalais', '+221', 'Dakar', 16743927, 'Macky Sall'], 'Sierra Leone': ['Sierra-léonais', '+232', 'Freetown', 7976985, 'Julius Maada Bio'], 'Togo': ['Togolais', '+228', 'Lomé', 8278724, 'Faure Gnassingbé'], 'mozambique': ['Mozambicain', '+258', 'Maputo', 31255435, 'Filipe Nyusi']}

On peut aussi modifier une valeur d’un dictionnaire

cedeao_dict["mozambique"][0] = "Mozambicaine" # On va mettre le gentillé au féminin
print(cedeao_dict["mozambique"])
## ['Mozambicaine', '+258', 'Maputo', 31255435, 'Filipe Nyusi']

3.3.3.2 Suppression de clé-valeur d’un dictionnaire

Pour supprimer un élément, on utilise la syntaxe suivante: del nom_de_mon_dict[“clé”]

Cette méthode supprime la clé et la valeur qui lui est associée.

del cedeao_dict["mozambique"]
print(cedeao_dict)
## {'Bénin': ['Béninois', '+229', 'Porto-Novo', 12123200, 'Patrice Talon'], 'Burkina Faso': ['Burkinabè', '+226', 'Ouagadougou', 20903278, 'Roch Marc Christian Kaboré'], "Côte d'Ivoire": ['Ivoirien', '+225', 'Yamoussoukro', 26896308, 'Alassane Ouattara'], 'Gambie': ['Gambien', '+220', 'Banjul', 2347706, 'Adama Barrow'], 'Ghana': ['Ghanéen', '+233', 'Accra', 31382960, 'Nana Akufo-Addo'], 'Guinée': ['Guinéen', '+224', 'Conakry', 13132792, 'Alpha Condé'], 'Guinée-Bissau': ['Bissau-Guinéen', '+245', 'Bissau', 1920922, 'Umaro Sissoco Embaló'], 'Liberia': ['Libérien', '+231', 'Monrovia', 5057677, 'George Weah'], 'Mali': ['Malien', '+223', 'Bamako', 20250833, 'Assimi Goïta'], 'Niger': ['Nigérien', '+227', 'Niamey', 26089574, 'Mohamed Bazoum'], 'Nigeria': ['Nigérian', '+234', 'Abuja', 211401000, 'Muhammadu Buhari'], 'Sénégal': ['Sénégalais', '+221', 'Dakar', 16743927, 'Macky Sall'], 'Sierra Leone': ['Sierra-léonais', '+232', 'Freetown', 7976985, 'Julius Maada Bio'], 'Togo': ['Togolais', '+228', 'Lomé', 8278724, 'Faure Gnassingbé']}

On peut aussi supprimer juste un élément de la valeur de cette clé.

del cedeao_dict["Sénégal"][-1] # On supprime le Président du Sénégal
print(cedeao_dict["Sénégal"])
## ['Sénégalais', '+221', 'Dakar', 16743927]

3.3.3.3 Fusionner des dictionnaires

On peut fusionner dictionnaires et en faire un seul avec la fonction update().

Syntaxe : dictionnaire1.update(dictionnaire2)

dict1 = {"fruit": "apple", "animal": "dog", "color": "blue"}
dict2 = {"sport": "football", "vehicle": "car", "color": "red"}
dict1.update(dict2)

print(dict1)
## {'fruit': 'apple', 'animal': 'dog', 'color': 'red', 'sport': 'football', 'vehicle': 'car'}

3.4 Sets

3.4.1 Définition d’un set

Un set contient une collection non-ordonnée d’éléments uniques (pas de doublons) et inaltérables (pas de listes en élément par exemple, mais on peut mettre des tuples). Cela signifie qu’un set ne peut pas contenir plusieurs éléments identiques et l’ordre dans lequel les éléments sont stockés n’a pas d’importance.

La structure de set est une implémentation en Python des ensembles en mathématiques.

On peut créer un tuple en mettant les valeurs entre parenthèses ou sans

my_set = set("Kobe Bryant")
print(my_set)
## {'B', ' ', 'y', 'b', 'e', 'o', 'a', 'r', 'n', 't', 'K'}

On peut aussi avec une chaîne de caractères contenant des doublons

my_other_set = set("Ouagadougou")
print(my_other_set)
## {'g', 'O', 'o', 'a', 'u', 'd'}

On voit que le set contient uniquement des éléments non ordonnées et uniques.

3.4.2 Accès aux éléments d’un set

Un set étant non ordonné, il est impossible de sélectionner des éléments d’un set par slicing. ### Modification d’un set #### Ajout d’un élément L’ajout d’un élément au set se fait par la fonction add().

Syntaxe : nom_de_mon_set.add(new_element)

set_nombres_premiers = set([1, 3, 5, 7, 9]) # on crée le set à partir d'une liste
set_nombres_premiers.add(11) # On ajoute le nombre 11 au set
print(set_nombres_premiers)
## {1, 3, 5, 7, 9, 11}

On va essayer d’ajouter un nombre qui existe déjà

set_nombres_premiers.add(1) # On ajoute le nombre 1 au set
print(set_nombres_premiers)
## {1, 3, 5, 7, 9, 11}

On voit qu’il ne se passe rien, ce qui est totalement normal car le set ne doit pas contenir de doublons.

3.4.2.1 Suppression d’un élément

La suppression d’un élément du set se fait par la fonction discard().

Syntaxe : nom_de_mon_set.discard(new_element)

set_nombres_premiers.discard(5) # On supprime le chiffre 5 du set
print(set_nombres_premiers)
## {1, 3, 7, 9, 11}

3.5 Synthèse