Explications :
Pour les deux dernières lignes, j'utilise la fonction built-In zip dans une compréhension de liste.
La fonction zip :
Tout d'abord, la fonction zip permet de parcourir deux listes (autant d'itérables qu'on veut en fait) de manière simultanée. Dans notre cas, je parcours ETUDIANTS et en simultannée je parcours PRESENT. La fonction zip me renvoie un itérateur que je parcours ensuite à l'aide d'une boucle for.
Cet itérateur me renvoie à chaque itération un n-uplet regroupant chaque valeur au même index dans les deux listes. Voici un exemple plus simple :
prenoms = ["Titouan", "Pierre", "Corentin"]
ages = [16, 18, 15]
print(list(zip(prenoms, ages)))
Renvoie :
[('Titouan', 16), ('Pierre', 18), ('Corentin', 15)]
Maintenant qu'on comprend ce que renvoie zip, je peux écrire ce genre de code :
prenoms = ["Titouan", "Pierre", "Corentin"]
ages = [16, 18, 15]
for prenom, age in zip(prenoms, ages):
if age >= 18:
print(f"{prenom} est majeur.")
else:
print(f"{prenom} est mineur.")
Renvoie :
Titouan est mineur.
Pierre est majeur.
Corentin est mineur.
La compréhension de liste :
L'idée de la compréhension de liste, c'est de refaire le code qui est au-dessus mais à l'intérieur d'une liste et de stocker dans la liste les résultats qui m'intéressent :
prenoms = ["Titouan", "Pierre", "Corentin"]
ages = [16, 18, 15]
# Ici, on stocke le contenu de la variable prenom dans la liste
majeurs = [prenom for prenom, age in zip(prenoms, ages) if age >= 18]
# Majeur est un objet de type list
print(majeurs)
Renvoie :
['Pierre']