Adloun

n° 202

Exercice supplémentaire · niveau 2 · NSI (première), chapitre 6 — Traiter des données en tables · Trois façons de joindre

Énoncé

Écrire l'anti-jointure : les lignes de la première table qui n'ont aucune correspondance. Montrer qu'elle explique exactement le déficit de lignes d'une fusion.

Corrigé


def anti_jointure(t1, t2, cle):
    """Lignes de t1 sans correspondance dans t2.

    Postcondition : len(anti) + len(fusion(t1, t2, cle)) == len(t1),
                    quand la clé est unique dans t2.
    """
    presentes = {l[cle] for l in t2}      # un ensemble : appartenance directe
    return [l for l in t1 if l[cle] not in presentes]

Sur la table où la classe de Nour a été écrite "1g3" : anti_jointure(abimee, classes, "classe") rend une ligne, celle de Nour — et la fusion perd exactement une ligne. Les deux nombres coïncident, comme l'annonce la postcondition.

L'usage. Le message d'avertissement du cours dit combien de lignes manquent ; l'anti-jointure dit lesquelles, donc pourquoi. C'est la différence entre « il manque lignes » et « toutes les classes du lycée Nord sont écrites en minuscules ». Sur des données réelles, l'anti-jointure est le premier outil de diagnostic à écrire.

Détail utile : presentes est un set, pas une liste. L'appartenance y est directe, comme dans un dictionnaire ; avec une liste, chaque test reparcourrait toute la seconde table, et l'anti-jointure redeviendrait quadratique.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.