Python >> Tutoriel Python >  >> Python

Comment écrire une boucle For imbriquée dans One Line Python ?

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 et if 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.