Python >> Tutoriel Python >  >> Python

Python One Line For Loop [Un tutoriel simple]

Python est puissant - vous pouvez condenser de nombreux algorithmes en une seule ligne de code Python.

Alors la question naturelle se pose :pouvez-vous écrire une boucle for dans une seule ligne de code ?

Cet article explore en détail cette question essentielle à la mission.

Comment écrire une boucle For dans une seule ligne de code Python ?

Il existe deux manières d'écrire une boucle for d'une seule ligne :

  • Méthode 1 :Si le corps de la boucle se compose d'une instruction, écrivez simplement cette instruction dans la même ligne :for i in range(10): print(i) . Cela imprime les 10 premiers chiffres sur le shell (de 0 à 9).
  • Méthode 2 : Si le but de la boucle est de créer une liste, utilisez plutôt la compréhension de liste :squares = [i**2 for i in range(10)] . Le code met au carré les dix premiers nombres et les stocke dans la liste squares .

Examinons les deux variantes plus en détail.

Assez de promo, passons à la première méthode, le profane…

Méthode 1 :boucle For sur une seule ligne

Le simple fait d'écrire la boucle for sur une seule ligne est le moyen le plus direct d'accomplir la tâche. Après tout, Python n'a pas besoin des niveaux d'indentation pour résoudre les ambiguïtés lorsque le corps de la boucle se compose d'une seule ligne.

Supposons que nous souhaitions écrire la boucle for suivante dans une seule ligne de code :

>>> for i in range(10):
	print(i)

	
0
1
2
3
4
5
6
7
8
9

Nous pouvons facilement y parvenir en écrivant la commande dans une seule ligne de code :

>>> for i in range(10): print(i)

0
1
2
3
4
5
6
7
8
9

Bien que cette réponse semble simple, la question intéressante est :pouvons-nous écrire une boucle for plus complexe qui a un corps de boucle plus long sur une seule ligne ?

C'est beaucoup plus difficile. Bien qu'il soit possible de condenser des algorithmes compliqués dans une seule ligne de code, il n'y a pas de formule générale.

Si vous souhaitez compresser des algorithmes entiers en une seule ligne de code, consultez cet article avec 10 one-liners Python qui tiennent dans un seul tweet.

Supposons que vous ayez la boucle plus complexe suivante :

for i in range(10):
    if i<5:
        j = i**2
    else:
        j = 0    
    print(j)

Cela génère la sortie :

0
1
4
9
16
0
0
0
0
0

Pouvons-nous le compresser en une seule ligne?

La réponse est oui ! Découvrez l'extrait de code suivant :

for i in range(10): print(i**2 if i<5 else 0)

Cela génère la même sortie que notre for multiligne boucle.

En fait, nous pouvons utiliser l'opérateur ternaire en Python qui nous permet de compresser un if déclaration en une seule ligne.

Consultez ce didacticiel sur notre blog si vous souhaitez en savoir plus sur l'excitant opérateur ternaire de Python.

L'opérateur ternaire est très intuitif :il suffit de le lire de gauche à droite pour comprendre sa signification.

Dans le corps de la boucle print(i**2 if i<5 else 0) on imprime le nombre carré i**2 si i est plus petit que 5, sinon on imprime 0.

Explorons une astuce Python alternative très populaire parmi les maîtres Python :

Méthode 2 :Compréhension de la liste

Étant détestés par les débutants, les codeurs Python expérimentés ne peuvent pas vivre sans cette fonctionnalité Python géniale appelée list comprehension .

Disons que nous voulons créer une liste de nombres au carré. La manière traditionnelle serait d'écrire quelque chose dans ce sens :

squares = []

for i in range(10):
    squares.append(i**2)
    
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Nous créons une liste vide squares et ajouter successivement un autre nombre carré commençant par 0**2 et se terminant par 9**2.

Ainsi, le résultat est la liste [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] .

La compréhension de la liste condense cela en une seule ligne de code, qui est également lisible, plus efficace et concise.

print([i**2 for i in range(10)])

Cette ligne accomplit la même sortie avec beaucoup moins de bits.

Un didacticiel complet sur la compréhension des listes peut être trouvé sur cette ressource de blog illustrée.

Aussi, n'hésitez pas à regarder la vidéo dans mon tutoriel de compréhension de liste :

List comprehension 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 de liste sélectionner ? Il se compose d'un nombre arbitraire d'instructions for et if.

La première partie est l'expression. Dans l'exemple ci-dessus, il s'agissait de l'expression i**2 . Utilisez n'importe quelle variable dans votre expression que vous avez définie dans le contexte d'une instruction de boucle.

La deuxième partie est le contexte . Dans l'exemple ci-dessus, il s'agissait de l'expression for i in range(10) . Le contexte consiste en un nombre arbitraire de for et if clauses. Le but unique du contexte est de définir (ou de restreindre) la séquence d'éléments sur laquelle on veut appliquer l'expression.

Méthode 3 :Python une ligne pour la boucle avec If

Vous pouvez également modifier la déclaration de compréhension de liste en restreignant le contexte avec un autre if déclaration :

Problème :Disons que nous voulons créer une liste de nombres au carré, mais vous ne considérez que les nombres pairs et ignorez les nombres impairs.

Exemple :La méthode multi-lignes serait la suivante.

squares = []

for i in range(10):
    if i%2==0:
        squares.append(i**2)
    
print(squares)
# [0, 4, 16, 36, 64]

Vous créez une liste vide squares et ajouter successivement un autre nombre carré commençant par 0**2 et se terminant par 8**2—mais en ne considérant que les nombres pairs 0, 2, 4, 6, 8.

Ainsi, le résultat est la liste [0, 4, 16, 36, 64] .

Encore une fois, vous pouvez utiliser la compréhension de liste [i**2 for i in range(10) if i%2==0] avec un if restrictif clause (en gras) dans la partie contexte pour compresser ceci en une seule ligne de code Python.

Voir ici :

print([i**2 for i in range(10) if i%2==0])
# [0, 4, 16, 36, 64]

Cette ligne accomplit la même sortie avec beaucoup moins de bits.

Article connexe :Boucle for Python sur une ligne avec If

Questions connexes

Plongeons-nous dans quelques questions connexes qui pourraient vous venir à l'esprit.

Qu'est-ce qu'une expression génératrice ?

Une expression de générateur est un outil simple pour générer des itérateurs.

Si vous utilisez un for boucle, vous parcourez souvent un itérateur. Par exemple, une expression de générateur ne crée pas explicitement une liste en mémoire.

Au lieu de cela, il génère dynamiquement l'élément suivant dans l'itérable au fur et à mesure qu'il parcourt l'itérable.

Nous avons utilisé une expression de générateur dans le print() déclaration ci-dessus :

print(i**2 if i<5 else 0)

Il n'y a pas de crochets autour de l'expression du générateur comme c'est le cas pour les compréhensions de liste.

Comment créer une boucle For imbriquée sur une seule ligne ?

Nous ne pouvons pas écrire une simple boucle for imbriquée dans une ligne de Python.

Dites, vous voulez écrire un for imbriqué boucle comme suit dans une ligne de code Python :

for i in range(3):
    for j in range(3):
        print((i,j))

'''
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
(2, 0)
(2, 1)
(2, 2)
'''

Lorsque nous essayons d'écrire ceci dans une seule ligne de code, nous obtenons une erreur de syntaxe :

for i in range(3): for j in range(3): print((i,j))
# Syntax Error

Vous pouvez voir le message d'erreur dans la capture d'écran suivante :

Cependant, nous pouvons créer une déclaration de compréhension de liste imbriquée.

print([(i,j) for i in range(3) for j in range(3)])
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1),
# (1, 2), (2, 0), (2, 1), (2, 2)]

Cela ne conduit qu'à une partie de contexte légèrement plus complexe for i in range(3) for j in range(3) . Mais c'est gérable.

Où aller à partir d'ici

Connaître les petites astuces d'une seule ligne Python telles que la compréhension de liste et le for sur une seule ligne loops est vital pour votre succès dans le langage Python. Tous les codeurs experts les connaissent par cœur. Après tout, c'est ce qui les rend très productifs.

Si vous voulez apprendre le langage Python par cœur, rejoignez mon cours Python gratuit par e-mail.

Il est basé à 100% sur des feuilles de triche Python gratuites et des leçons Python. C'est amusant, facile et vous pouvez partir à tout moment.

Livre Python One-Liners :maîtrisez d'abord la ligne unique !

Les programmeurs Python amélioreront leurs compétences en informatique avec ces lignes utiles.

Python One-Liners vous apprendra à lire et à écrire des « lignes simples » :des déclarations concises de fonctionnalités utiles regroupées dans une seule ligne de code. Vous apprendrez à décompresser et à comprendre systématiquement n'importe quelle ligne de code Python, et à écrire du Python éloquent et puissamment compressé comme un expert.

Les cinq chapitres du livre couvrent (1) les trucs et astuces, (2) les expressions régulières, (3) l'apprentissage automatique, (4) les principaux sujets de science des données et (5) les algorithmes utiles.

Des explications détaillées des one-liners introduisent les concepts clés de l'informatique etdéveloppez vos compétences en matière de codage et d'analyse . Vous découvrirez les fonctionnalités Python avancées telles que la compréhension de liste , tranchage , fonctions lambda , expressions régulières , carte et réduire fonctions et affectations de tranches .

Vous apprendrez également à :

  • Exploiter les structures de données pour résoudre des problèmes réels , comme utiliser l'indexation booléenne pour trouver des villes avec une pollution supérieure à la moyenne
  • Utiliser les bases de NumPy comme tableau , forme , axe , tapez , diffusion , indexation avancée , tranchage , tri , recherche , agrégation , et statistiques
  • Calculer des statistiques de base de tableaux de données multidimensionnels et les algorithmes K-Means pour l'apprentissage non supervisé
  • Créer davantage d'expressions régulières avancées en utilisant le regroupement et groupes nommés , anticipations négatives , caractères échappés , espaces blancs, jeux de caractères (et jeux de caractères négatifs ) et opérateurs gourmands/non gourmands
  • Comprendre un large éventail de sujets informatiques , y compris les anagrammes , palindromes , surensembles , permutations , factorielles , nombres premiers , Fibonacci chiffres, obscurcissement , recherche , et tri algorithmique

À la fin du livre, vous saurez comment écrire Python dans sa forme la plus raffinée , et créez de belles pièces concises d'"art Python" en une seule ligne.

Obtenez vos Python One-Liners sur Amazon !!

Humour de programmeur – Blockchain