Aller au contenu

🏁 Listes de listes ou de dictionnaires⚓︎

Considérons le tableau de couleurs ci-dessous décrivant différentes couleurs à l'aide de quatre descripteurs :

  • leur nom,
  • leur composante rouge (de 0 à 255),
  • leur composante verte (de 0 à 255),
  • leur composante bleue (de 0 à 255).
Couleur Nom Rouge Vert Bleu
 Noir000
 Blanc255255255
 Rouge25500
 Vert02550
 Bleu00255
 Jaune2552550
 Cyan0255255
 Magenta2550255
 Argent192192192
 Gris128128128
 Bordeaux12800
 Olive1281280
 Violet1280128
 Marine00128

Listes de listes⚓︎

Il est possible de représenter ces informations dans une liste Python. Chacun des éléments de cette liste est lui-même une liste décrivant une couleur :

🐍 Script Python
liste_couleurs = [
    ["Noir",       0,   0,   0],  # Couleur 0
    ["Blanc",    255, 255, 255],  # Couleur 1
    ["Rouge",    255,   0,   0],  # Couleur 2
    ["Vert",       0, 255,   0],  # Couleur 3
    ["Bleu",       0,   0, 255],  # Couleur 4
    ["Jaune",    255, 255,   0],  # Couleur 5
    ["Cyan",       0, 255, 255],  # Couleur 6
    ["Magenta",  255,   0, 255],  # Couleur 7
    ["Argent",   192, 192, 192],  # Couleur 8
    ["Gris",     128, 128, 128],  # Couleur 9
    ["Bordeaux", 128,   0,   0],  # Couleur 10
    ["Olive",    128, 128,   0],  # Couleur 11
    ["Violet",   128,   0, 128],  # Couleur 12
    ["Marine",     0,   0, 128]   # Couleur 13
]

Remarque

On a ajouté des espaces afin de simplifier la lecture. Elles1 ne sont pas indispensables.

Les informations décrivant une couleur étant décrites dans des sous-listes, elles sont accessibles en utilisant les indices :

Indice 0 1 2 3
Descripteur "nom" "rouge" "vert" "bleu"

Il est donc possible de récupérer le nom de la troisième couleur de la liste en faisant liste_couleurs[2][0] qui renvoie "rouge".

Liste de listes

On considère la liste décrite ci-dessus.

Cochez la ou les bonnes réponses.

  • On peut accéder à la composante rouge de la première couleur en faisant liste_couleurs[0][0]
  • liste_couleurs[4] n'existe pas car il n'y a que quatre descripteurs
  • liste_couleurs[5][2] désigne la composante verte du jaune
  • [c[0] for c in liste_couleurs] permet de récupérer les noms de toutes les couleurs
  • ❌ liste_couleurs[0][0] permet de récupérer le nom de la première couleur
  • ❌ liste_couleurs[4] renvoie toutes les informations décrivant le bleu
  • ✅ liste_couleurs[5][2] désigne la composante verte du jaune
  • ✅ [c[0] for c in liste_couleurs] permet de récupérer les noms de toutes les couleurs
Requêtes (listes)

On travaille toujours avec la liste de listes décrite ci-dessus.

Compléter le script afin de d'effectuer les requêtes proposées :

###
# listepy-und1 est la liste des noms des couleursbksl-nlattendu = [c[0] for c in listepy-undcouleurs]bksl-nlassert listepy-und1 == attendu, "Erreur sur la liste 1"bksl-nlbksl-nl# listepy-und2 est la liste des composantes vertes des couleursbksl-nlattendu = [c[2] for c in listepy-undcouleurs]bksl-nlassert listepy-und2 == attendu, "Erreur sur la liste 2"bksl-nlbksl-nl# listepy-und3 est la liste des noms des couleurs dont la composante rouge est supérieure ou égale à 200bksl-nlattendu = [c[0] for c in listepy-undcouleurs if c[1] >= 200]bksl-nlassert listepy-und3 == attendu, "Erreur sur la liste 3"bksl-nlbksl-nl# listepy-und4 est la liste des noms des couleurs dont la composante rouge est strictement supérieure à la bleuebksl-nlattendu = [c[0] for c in listepy-undcouleurs if c[1] > c[3]]bksl-nlassert listepy-und4 == attendu, "Erreur sur la liste 4"bksl-nlbksl-nl# listepy-und5 est la liste des noms des couleurs dont la composante bleue est plus grande que la verte et la rougebksl-nlattendu = [c[0] for c in listepy-undcouleurs if c[3] >= c[2] and c[3] >= c[1]]bksl-nlassert listepy-und5 == attendu, "Erreur sur la liste 5"bksl-nlbksl-nl# listepy-und6 est la liste des triplets formés par les trois composantes de chaque couleurbksl-nlattendu = [(c[1], c[2], c[3]) for c in listepy-undcouleurs]bksl-nlassert listepy-und6 == attendu, "Erreur sur la liste 6"bksl-nlbksl-nl 10/10
listepy-undcouleurs = [bksl-nl ["Noir", 0, 0, 0],bksl-nl ["Blanc", 255, 255, 255],bksl-nl ["Rouge", 255, 0, 0],bksl-nl ["Vert", 0, 255, 0],bksl-nl ["Bleu", 0, 0, 255],bksl-nl ["Jaune", 255, 255, 0],bksl-nl ["Cyan", 0, 255, 255],bksl-nl ["Magenta", 255, 0, 255],bksl-nl ["Argent", 192, 192, 192],bksl-nl ["Gris", 128, 128, 128],bksl-nl ["Bordeaux", 128, 0, 0],bksl-nl ["Olive", 128, 128, 0],bksl-nl ["Violet", 128, 0, 128],bksl-nl ["Marine", 0, 0, 128]bksl-nl]bksl-nlbksl-nl# listepy-und1 est la liste des noms des couleursbksl-nllistepy-und1 = ...bksl-nlbksl-nl# listepy-und2 est la liste des composantes vertes des couleursbksl-nllistepy-und2 = ...bksl-nlbksl-nl# listepy-und3 est la liste des noms des couleurs dont la composante rouge est supérieure ou égale à 200bksl-nllistepy-und3 = ...bksl-nlbksl-nl# listepy-und4 est la liste des noms des couleurs dont la composante rouge est strictement supérieure à la bleuebksl-nllistepy-und4 = ...bksl-nlbksl-nl# listepy-und5 est la liste des noms des couleurs dont la composante bleue est plus grande que la verte et la rougebksl-nllistepy-und5 = ...bksl-nlbksl-nl# listepy-und6 est la liste des triplets formés par les trois composantes de chaque couleurbksl-nllistepy-und6 = ...bksl-nlbksl-nl# listepy-und1 est la liste des noms des couleursbksl-nllistepy-und1 = [c[0] for c in listepy-undcouleurs]bksl-nlbksl-nl# listepy-und2 est la liste des composantes vertes des couleursbksl-nllistepy-und2 = [c[2] for c in listepy-undcouleurs]bksl-nlbksl-nl# listepy-und3 est la liste des noms des couleurs dont la composante rouge est supérieure ou égale à 200bksl-nllistepy-und3 = [c[0] for c in listepy-undcouleurs if c[1] >= 200]bksl-nlbksl-nl# listepy-und4 est la liste des noms des couleurs dont la composante rouge est strictement supérieure à la bleuebksl-nllistepy-und4 = [c[0] for c in listepy-undcouleurs if c[1] >= c[3]]bksl-nlbksl-nl# listepy-und5 est la liste des noms des couleurs dont la composante bleue est plus grande que la verte et la rougebksl-nllistepy-und5 = [c[0] for c in listepy-undcouleurs if c[3] >= c[2] and c[3] >= c[1]]bksl-nlbksl-nl# listepy-und6 est la liste des triplets formés par les trois composantes de chaque couleurbksl-nllistepy-und6 = [(c[1], c[2], c[3]) for c in listepy-undcouleurs]bksl-nlbksl-nl

A

Z

Nuances de gris (listes)

On travaille toujours avec la liste décrite ci-dessus.

Il est possible de convertir une couleur en noir et blanc en donnant à chacun de ses canaux la même valeur obtenue par la formule suivante :

\[Y = 0,299\times Rouge + 0,587 \times Vert + 0,114 \times Bleu\]

Cette valeur \(Y\) est appelée niveau de gris.

Par exemple pour le rouge on obtient : \(Y = 0,299 \times 255 + 0,587 \times 0 + 0,114 \times 0 \approx 76\).

Compléter le code ci-dessous permettant d'obtenir la liste contenant le niveau de gris associé à chaque couleur de liste_couleurs.

###
#Testsbksl-nlattendus = [0.299 py-str couleur[1] + 0.587 py-str couleur[2] + 0.114 py-str couleur[3] for couleur in listepy-undcouleurs]bksl-nlbksl-nlassert all(abs(g - a) < 10py-strpy-str-6 for g, a in zip(niveauxpy-undgris, attendus))bksl-nl 10/10
listepy-undcouleurs = [bksl-nl ["Noir", 0, 0, 0],bksl-nl ["Blanc", 255, 255, 255],bksl-nl ["Rouge", 255, 0, 0],bksl-nl ["Vert", 0, 255, 0],bksl-nl ["Bleu", 0, 0, 255],bksl-nl ["Jaune", 255, 255, 0],bksl-nl ["Cyan", 0, 255, 255],bksl-nl ["Magenta", 255, 0, 255],bksl-nl ["Argent", 192, 192, 192],bksl-nl ["Gris", 128, 128, 128],bksl-nl ["Bordeaux", 128, 0, 0],bksl-nl ["Olive", 128, 128, 0],bksl-nl ["Violet", 128, 0, 128],bksl-nl ["Marine", 0, 0, 128],bksl-nl]bksl-nlbksl-nlniveauxpy-undgris = [0.299 py-str couleur[...] + 0.587 py-str ... + ... py-str ... for ... in listepy-undcouleurs]bksl-nlbksl-nlniveauxpy-undgris = [0.299 py-str couleur[1] + 0.587 py-str couleur[2] + 0.114 py-str couleur[3] for couleur in listepy-undcouleurs]bksl-nlbksl-nl

A

Dans le cas présent, on pourrait aussi utiliser le unpacking :

🐍 Script Python
niveaux_gris = [0.299 * rouge + 0.587 * vert + 0.114 * bleu for (nom, rouge, vert, bleu) in liste_couleurs]

Voire même, dans la mesure où le nom n'est pas utilisé :

🐍 Script Python
niveaux_gris = [0.299 * rouge + 0.587 * vert + 0.114 * bleu for (_, rouge, vert, bleu) in liste_couleurs]

Z

Listes de dictionnaires⚓︎

Une autre approche est possible : au lieu de représenter les données dans une liste de listes, on utilise une liste de dictionnaires. Chaque couleur est décrite par un dictionnaire dont les clés sont les noms des descripteurs et les valeurs la valeur associée.

🐍 Script Python
dico_couleurs = [
    {"nom": "Noir",     "rouge":   0, "vert":   0, "bleu":   0},
    {"nom": "Blanc",    "rouge": 255, "vert": 255, "bleu": 255},
    {"nom": "Rouge",    "rouge": 255, "vert":   0, "bleu":   0},
    {"nom": "Vert",     "rouge":   0, "vert": 255, "bleu":   0},
    {"nom": "Bleu",     "rouge":   0, "vert":   0, "bleu": 255},
    {"nom": "Jaune",    "rouge": 255, "vert": 255, "bleu":   0},
    {"nom": "Cyan",     "rouge":   0, "vert": 255, "bleu": 255},
    {"nom": "Magenta",  "rouge": 255, "vert":   0, "bleu": 255},
    {"nom": "Argent",   "rouge": 192, "vert": 192, "bleu": 192},
    {"nom": "Gris",     "rouge": 128, "vert": 128, "bleu": 128},
    {"nom": "Bordeaux", "rouge": 128, "vert":   0, "bleu":   0},
    {"nom": "Olive",    "rouge": 128, "vert": 128, "bleu":   0},
    {"nom": "Violet",   "rouge": 128, "vert":   0, "bleu": 128},
    {"nom": "Marine",   "rouge":   0, "vert":   0, "bleu": 128},
]

Au sein de chaque dictionnaire, les informations sont identifiées par les clés. Il est plus facile de récupérer chaque valeur (sans avoir à compter les indices !).

Il est possible de récupérer le nom de la troisième couleur de la liste en faisant liste_couleurs[2]["nom"] qui renvoie là encore "rouge".

Liste de dictionnaires

On considère la liste décrite ci-dessus.

  • On peut accéder à la composante rouge de la première couleur en faisant dico_couleurs[0][rouge]
  • dico_couleurs[4][2] renvoie la composante bleue du bleu
  • dico_couleurs["jaune"]["vert"] désigne la composante verte du jaune
  • [c["nom"] for c in dico_couleurs] permet de récupérer les noms de toutes les couleurs
  • ❌ "rouge" est une chaîne de caractères, les guillemets sont indispensables
  • ❌ Il faut faire dico_couleurs[4]["bleu"]
  • ❌ La couleur jaune est à l'indice 5 de la liste
  • ✅ [c["nom"] for c in dico_couleurs] permet bien de récupérer les noms de toutes les couleurs
Requêtes (dictionnaires)

On travaille toujours avec la liste de dictionnaires décrite ci-dessus.

Compléter le script afin de d'effectuer les requêtes proposées :

###
# listepy-und1 est la liste des noms des couleursbksl-nlattendu = [c["nom"] for c in dicopy-undcouleurs]bksl-nlassert listepy-und1 == attendu, "Erreur sur la liste 1"bksl-nlbksl-nl# listepy-und2 est la liste des composantes vertes des couleursbksl-nlattendu = [c["vert"] for c in dicopy-undcouleurs]bksl-nlassert listepy-und2 == attendu, "Erreur sur la liste 2"bksl-nlbksl-nl# listepy-und3 est la liste des noms des couleurs dont la composante rouge est supérieure ou égale à 200bksl-nlattendu = [c["nom"] for c in dicopy-undcouleurs if c["rouge"] >= 200]bksl-nlassert listepy-und3 == attendu, "Erreur sur la liste 3"bksl-nlbksl-nl# listepy-und4 est la liste des noms des couleurs dont la composante rouge est strictement supérieure à la bleuebksl-nlattendu = [c["nom"] for c in dicopy-undcouleurs if c["rouge"] > c["bleu"]]bksl-nlassert listepy-und4 == attendu, "Erreur sur la liste 4"bksl-nlbksl-nl# listepy-und5 est la liste des noms des couleurs dont la composante bleue est plus grande que la verte et la rougebksl-nlattendu = [c["nom"] for c in dicopy-undcouleurs if c["bleu"] >= c["vert"] and c["bleu"] >= c["rouge"]]bksl-nlassert listepy-und5 == attendu, "Erreur sur la liste 5"bksl-nlbksl-nl# listepy-und6 est la liste des triplets formés par les trois composantes de chaque couleurbksl-nlattendu = [(c["rouge"], c["vert"], c["bleu"]) for c in dicopy-undcouleurs]bksl-nlassert listepy-und6 == attendu, "Erreur sur la liste 6"bksl-nlbksl-nl 10/10
dicopy-undcouleurs = [bksl-nl {"nom": "Noir", "rouge": 0, "vert": 0, "bleu": 0},bksl-nl {"nom": "Blanc", "rouge": 255, "vert": 255, "bleu": 255},bksl-nl {"nom": "Rouge", "rouge": 255, "vert": 0, "bleu": 0},bksl-nl {"nom": "Vert", "rouge": 0, "vert": 255, "bleu": 0},bksl-nl {"nom": "Bleu", "rouge": 0, "vert": 0, "bleu": 255},bksl-nl {"nom": "Jaune", "rouge": 255, "vert": 255, "bleu": 0},bksl-nl {"nom": "Cyan", "rouge": 0, "vert": 255, "bleu": 255},bksl-nl {"nom": "Magenta", "rouge": 255, "vert": 0, "bleu": 255},bksl-nl {"nom": "Argent", "rouge": 192, "vert": 192, "bleu": 192},bksl-nl {"nom": "Gris", "rouge": 128, "vert": 128, "bleu": 128},bksl-nl {"nom": "Bordeaux", "rouge": 128, "vert": 0, "bleu": 0},bksl-nl {"nom": "Olive", "rouge": 128, "vert": 128, "bleu": 0},bksl-nl {"nom": "Violet", "rouge": 128, "vert": 0, "bleu": 128},bksl-nl {"nom": "Marine", "rouge": 0, "vert": 0, "bleu": 128},bksl-nl]bksl-nlbksl-nl# listepy-und1 est la liste des noms des couleursbksl-nllistepy-und1 = ...bksl-nlbksl-nl# listepy-und2 est la liste des composantes vertes des couleursbksl-nllistepy-und2 = ...bksl-nlbksl-nl# listepy-und3 est la liste des noms des couleurs dont la composante rouge est supérieure ou égale à 200bksl-nllistepy-und3 = ...bksl-nlbksl-nl# listepy-und4 est la liste des noms des couleurs dont la composante rouge est strictement supérieure à la bleuebksl-nllistepy-und4 = ...bksl-nlbksl-nl# listepy-und5 est la liste des noms des couleurs dont la composante bleue est plus grande que la verte et la rougebksl-nllistepy-und5 = ...bksl-nlbksl-nl# listepy-und6 est la liste des triplets formés par les trois composantes de chaque couleurbksl-nllistepy-und6 = ...bksl-nlbksl-nl# listepy-und1 est la liste des noms des couleursbksl-nllistepy-und1 = [c["nom"] for c in dicopy-undcouleurs]bksl-nlbksl-nl# listepy-und2 est la liste des composantes vertes des couleursbksl-nllistepy-und2 = [c["vert"] for c in dicopy-undcouleurs]bksl-nlbksl-nl# listepy-und3 est la liste des noms des couleurs dont la composante rouge est supérieure ou égale à 200bksl-nllistepy-und3 = [c["nom"] for c in dicopy-undcouleurs if c["rouge"] >= 200]bksl-nlbksl-nl# listepy-und4 est la liste des noms des couleurs dont la composante rouge est strictement supérieure à la bleuebksl-nllistepy-und4 = [c["nom"] for c in dicopy-undcouleurs if c["rouge"] > c["bleu"]]bksl-nlbksl-nl# listepy-und5 est la liste des noms des couleurs dont la composante bleue est plus grande que la verte et la rougebksl-nllistepy-und5 = [c["nom"] for c in dicopy-undcouleurs if c["bleu"] >= c["vert"] and c["bleu"] >= c["rouge"]]bksl-nlbksl-nl# listepy-und6 est la liste des triplets formés par les trois composantes de chaque couleurbksl-nllistepy-und6 = [(c["rouge"], c["vert"], c["bleu"]) for c in dicopy-undcouleurs]bksl-nlbksl-nl

A

Z

Nuances de gris (dictionnaires)

On travaille toujours avec la liste de dictionnaires ci-dessus.

Reprendre l'exercice « Nuances de gris (listes) » avec cette structure de données.

###
#Testsbksl-nlattendus = [0.299 py-str couleur["rouge"] + 0.587 py-str couleur["vert"] + 0.114 py-str couleur["bleu"] for couleur in dicopy-undcouleurs]bksl-nlbksl-nlassert all(abs(g - a) < 10py-strpy-str-6 for g, a in zip(niveauxpy-undgris, attendus))bksl-nlbksl-nl 10/10
dicopy-undcouleurs = [bksl-nl {"nom": "Noir", "rouge": 0, "vert": 0, "bleu": 0},bksl-nl {"nom": "Blanc", "rouge": 255, "vert": 255, "bleu": 255},bksl-nl {"nom": "Rouge", "rouge": 255, "vert": 0, "bleu": 0},bksl-nl {"nom": "Vert", "rouge": 0, "vert": 255, "bleu": 0},bksl-nl {"nom": "Bleu", "rouge": 0, "vert": 0, "bleu": 255},bksl-nl {"nom": "Jaune", "rouge": 255, "vert": 255, "bleu": 0},bksl-nl {"nom": "Cyan", "rouge": 0, "vert": 255, "bleu": 255},bksl-nl {"nom": "Magenta", "rouge": 255, "vert": 0, "bleu": 255},bksl-nl {"nom": "Argent", "rouge": 192, "vert": 192, "bleu": 192},bksl-nl {"nom": "Gris", "rouge": 128, "vert": 128, "bleu": 128},bksl-nl {"nom": "Bordeaux", "rouge": 128, "vert": 0, "bleu": 0},bksl-nl {"nom": "Olive", "rouge": 128, "vert": 128, "bleu": 0},bksl-nl {"nom": "Violet", "rouge": 128, "vert": 0, "bleu": 128},bksl-nl {"nom": "Marine", "rouge": 0, "vert": 0, "bleu": 128},bksl-nl]bksl-nlbksl-nlniveauxpy-undgris = ...bksl-nlbksl-nlniveauxpy-undgris = [bksl-nl 0.299 py-str couleur["rouge"] + 0.587 py-str couleur["vert"] + 0.114 py-str couleur["bleu"] for couleur in dicopy-undcouleursbksl-nl]bksl-nlbksl-nl

A

Z


  1. En typographie, « espace » est un nom commun féminin