Explication de la leçon
Après cette leçon, tu seras capable de :
Un code pythonique n'est pas le code comportant le moins de caractères possible. C'est un code qui communique clairement l'intention en utilisant les outils de Python.
Utilise une compréhension pour construire une nouvelle collection. Utilise une boucle for normale lorsque ton objectif est un effet de bord visible, tel que l'affichage de chaque ligne, ou lorsque plusieurs éléments d'état changent au cours d'une itération. Utilise zip() pour des séquences véritablement alignées, enumerate() lorsque le numéro compte, et sorted() pour renvoyer une nouvelle liste ordonnée sans muter la source.
Un bug courant apparaît lorsque tu filtres deux listes alignées séparément : leurs positions restantes peuvent cesser de correspondre. Apparie d'abord les valeurs liées, puis filtre les enregistrements combinés.
Un rapport fiable s'assemble généralement selon des étapes claires : normaliser → sélectionner → transformer → ordonner → rapporter. Matérialise une collection intermédiaire lorsque tu dois l'inspecter deux fois ; sinon, utilise une expression génératrice pour un agrégat ou une vérification à passage unique.
Pour un résultat d'aptitude, all() seul ne suffit pas si un ensemble vide de vérifications doit compter comme bloqué. Déclare la règle métier explicitement : exige des vérifications non vides et que chaque vérification réussisse.
raw_regions = [" US ", "eu", " APAC "]
regions = [region.strip().lower() for region in raw_regions]
print(regions)
print(raw_regions[0])Sortie :
['us', 'eu', 'apac']
US L'entrée reste intacte ; la nouvelle liste contient les valeurs normalisées.
jobs = ["api", "queue", "mail"]
owners = ["Maya", "Omar", "Lina"]
active_pairs = [(job, owner) for job, owner in zip(jobs, owners) if job != "queue"]
print(active_pairs)Sortie :
[('api', 'Maya'), ('mail', 'Lina')]Filtrer les paires ensemble préserve quel propriétaire appartient à quelle tâche.
services = ["api", "db"]
for position, service in enumerate(services, start=1):
print(f"{position}. {service}")Sortie :
1. api
2. dbUne boucle normale est plus claire qu'une compréhension utilisée uniquement pour l'affichage.
checks = ["PASS", "pass"]
normalized = [item.strip().lower() for item in checks]
ready = bool(normalized) and all(item == "pass" for item in normalized)
print(f"Ready: {ready}")Sortie :
Ready: TrueSi la liste des vérifications était vide, la garde bool(normalized) empêcherait un résultat prêt accidentel.
| Intention | Option lisible |
|---|---|
| Construire une nouvelle collection | Compréhension de liste / dict / set |
| Afficher ou mettre à jour plusieurs compteurs | Boucle for normale |
| Combiner des entrées alignées | zip() avant de filtrer |
| Obtenir des numéros pour les lignes de rapport | enumerate(..., start=1) |
| Trier sans muter la source | sorted(..., key=...) |
| Agréger une seule fois | Expression génératrice avec sum() / any() / all() |
| Confirmer qu'un lot non vide a réussi | bool(items) and all(...) |
zip().all([]) signifie qu'un vrai lot a été vérifié.