LyCode Lab

Chapitre 1 : Types construits, compréhension

p-uplets, tableaux et dictionnaires

Une table est faite de briques plus simples : des tableaux (listes), des p-uplets et des dictionnaires. Les bien connaître permet de lire un CSV sans tâtonner. Dans ce chapitre, tu manipules ces types construits à partir de quelques données du musée.

Au programme de NSI : Représentation des données : types construits : p-uplets, p-uplets nommés, tableaux indexés, tableaux de tableaux, dictionnaires. Écrire une fonction renvoyant un p-uplet de valeurs. Lire, modifier et parcourir un tableau, le construire par compréhension. Utiliser un tableau de tableaux. Construire une entrée de dictionnaire et parcourir un dictionnaire.

Les tableaux (listes)

Un tableau range des valeurs dans l'ordre. Chaque élément a un indice, qui commence à 0. On lit un élément avec t[i], on le modifie avec t[i] = valeur, on en ajoute avec append, et on les parcourt avec une boucle for. En Python, ce type s'appelle list.

Lire, modifier, parcourir
ages = [45, 17, 29]
print(ages[0])
ages[1] = 18
ages.append(34)
print(len(ages))

for age in ages:
    print(age)

Les tableaux de tableaux

Un tableau peut contenir des tableaux : on obtient une matrice. On accède à un élément avec deux indices : a[i][j] est l'élément de la ligne i et de la colonne j. Une table lue dans un fichier est un tableau de lignes, chacune étant elle-même un tableau de valeurs.

Une matrice 2 × 3
plan = [[3, 0, 2],
        [1, 4, 0]]
print(plan[1][1])

for i in range(len(plan)):
    for j in range(len(plan[i])):
        print(i, j, plan[i][j])

Construire un tableau par compréhension

Une compréhension construit un tableau en une ligne : « pour chaque élément, calcule quelque chose, éventuellement seulement s'il vérifie une condition ». C'est la version courte de la boucle qui remplit un tableau avec append.

Deux écritures équivalentes
ages = [45, 17, 29, 16]

# avec une boucle
majeurs = []
for age in ages:
    if age >= 18:
        majeurs.append(age)

# par compréhension
majeurs = [age for age in ages if age >= 18]
doubles = [2 * age for age in ages]

Les p-uplets

Un p-uplet (tuple) regroupe quelques valeurs, entre parenthèses. Contrairement à un tableau, il ne se modifie pas. C'est idéal pour une fonction qui doit renvoyer plusieurs valeurs à la fois.

Une fonction qui renvoie un p-uplet
def bornes(valeurs):
    return (min(valeurs), max(valeurs))

plus_petit, plus_grand = bornes([45, 17, 29])
print(plus_petit, plus_grand)

r = bornes([8, 3])
print(r[0], r[1])

Les dictionnaires

Un dictionnaire associe des valeurs à des clés. On y accède par la clé, pas par un indice : d['nom']. Un dictionnaire sert à représenter une fiche : c'est ce que csv.DictReader produit pour chaque ligne. En Python, un p-uplet nommé s'implémente avec un dictionnaire.

Construire et parcourir un dictionnaire
visiteur = {'nom': 'Durand', 'age': 45}
visiteur['ville'] = 'Brest'
print(visiteur['nom'])

print(list(visiteur.keys()))
print(list(visiteur.values()))
for cle, valeur in visiteur.items():
    print(cle, '->', valeur)
MéthodeRenvoie
d.keys()les clés
d.values()les valeurs
d.items()les couples (clé, valeur)
'clé' in dvrai si la clé existe

À toi de jouer : Exercice guidé

Le dictionnaire visiteur contient un nom et un âge. Ajoute la clé 'ville' avec la valeur 'Brest', puis range dans cles la liste des clés du dictionnaire. Remplace chaque ___.

Passer à l'énigme : Les fiches de Pixel