Résumé :Pour écrire une boucle for imbriquée dans une seule ligne de code Python, utilisez le code à une ligne [print(x, y) for x in iter1 for y in iter2]
qui itère sur toutes les valeurs x
dans le premier itérable et toutes les valeurs y
dans le second itérable.
Problème :Comment écrire une boucle for imbriquée en tant que Python one-liner ? En gros, vous voulez itérer sur deux itérables ou plus qui sont imbriqués les uns dans les autres. Voici un exemple de multiligne avec deux boucles imbriquées :
iter1 = [1, 2, 3, 4] iter2 = ['a', 'b', 'c'] for x in iter1: for y in iter2: print(x, y) ''' 1 a 1 b 1 c 2 a 2 b 2 c 3 a 3 b 3 c 4 a 4 b 4 c '''
Comment faire cela en une seule ligne ?
Plongeons dans plusieurs méthodes ! Voici un bref aperçu :
Exercice :Au lieu d'imprimer les sorties, stockez-les dans trois listes de tuples. Imprimez les listes après les avoir créées afin que votre sortie ait trois lignes !
Méthode 1 :Compréhension des listes imbriquées
La première méthode utilise la puissante fonctionnalité de compréhension de liste :
# Method 1: Nested List Comprehension [print(x, y) for x in iter1 for y in iter2]
La compréhension de liste est une manière compacte de créer des listes. La formule simple est [expression + context]
.
- Expression :Que faire de chaque élément de la liste ?
- Contexte :quels éléments sélectionner ? Le contexte consiste en un nombre arbitraire de
for
etif
déclarations.
Voici un court didacticiel vidéo sur la compréhension des listes au cas où vous auriez besoin d'un rappel rapide :
Méthode 2 :exec()
Vous pouvez toujours one-lineriser n'importe quel multi-liner en utilisant le exec(...)
intégré de Python fonction.
# Method 2: exec() exec("for x in iter1:\n for y in iter2:\n print(x, y)")
Vous avez écrit le multiligne sous la forme d'une chaîne à une ligne en utilisant le caractère de saut de ligne '\n'
. Notez que vous devez vous assurer que les trois lignes sont correctement indentées.
Méthode 3 :boucle For avec compréhension de liste
Encore une fois, vous utilisez la compréhension de liste, mais maintenant uniquement pour la boucle interne.
# Method 3: For Loop with List Comprehension for x in iter1: [print(x, y) for y in iter2]
Notez que de nombreux codeurs considéreraient cela comme "non pythonique" car vous créez une liste composée uniquement de None
values—les valeurs de retour du print()
appels de fonction.