L'approche pythonique des boucles for: range () et enumerate ()

L'auteur de la note, que nous publions aujourd'hui, souhaite parler de certaines fonctionnalités de l'utilisation for boucles for en Python.



La boucle for est l'une des pierres angulaires de la programmation. Les futurs programmeurs se familiarisent avec ces cycles au tout début de leurs études et, après la première connaissance, les utilisent constamment.

Si vous avez commencé à développer en Python, ayant une expérience de travail avec un autre langage de programmation populaire, tel que PHP ou JavaScript, vous connaissez la technique d'utilisation d'une variable de compteur qui stocke, par exemple, l'index de l'élément actuel du tableau en cours de traitement dans une boucle. Voici un exemple de travail avec une boucle écrite en JavaScript:

 let scores = [54,67,48,99,27]; for(const i=0; i < scores.length; i++) {   console.log(i, scores[i]); } /* 0 54 1 67 2 48 3 99 4 27 */ 

Lorsque vous travaillez avec for boucles, il est très important de comprendre que ces boucles n'itèrent pas sur les tableaux. Ils ne donnent au programmeur qu'un mécanisme pour travailler avec la variable compteur, qui est utilisée pour accéder aux éléments des tableaux traités.

Dans l'exemple précédent, la variable i n'a aucune relation explicite avec le tableau des scores . Il stocke juste un certain nombre, qui augmente de 1 à chaque itération de la boucle, et qui, en fin de compte, convient à un accès séquentiel aux éléments du tableau par leurs indices.

Ancienne façon (infructueuse) de travailler avec des tableaux


Python n'a pas for boucles for traditionnelles comme celle illustrée ci-dessus. Certes, si vous êtes comme moi, votre premier désir dans la maîtrise de Python sera de trouver un moyen de créer une boucle familière et pratique pour vous de travailler.

Par conséquent, vous pouvez détecter la fonction range() et écrire en Python quelque chose de semblable au suivant:

 scores = [54,67,48,99,27] for i in range(len(scores)):   print(i, scores[i]) """ 0 54 1 67 2 48 3 99 4 27 """ 

Le problème avec cette boucle est qu'elle ne correspond pas très bien à l'idéologie Python. Dans celui-ci, nous ne parcourons pas la liste, mais utilisons plutôt la variable auxiliaire i pour accéder aux éléments de la liste.

En fait, même en JavaScript, il existe des méthodes qui vous permettent de parcourir les tableaux, pour ainsi dire, sans intermédiaires. Ce sont forEach et for of loops.

Utilisation de la fonction enumerate ()


Si vous avez besoin de suivre adéquatement "l'index d'un élément" dans une boucle for Python, alors la fonction enumerate() , qui vous permet de "recalculer" l'objet itérable, peut être appropriée. Il peut être utilisé non seulement pour traiter des listes, mais aussi pour travailler avec d'autres types de données - avec des chaînes, des tuples, des dictionnaires.

Cette fonction prend deux arguments: un objet itérable et une valeur de compteur initiale facultative.

Si la valeur initiale du compteur enumerate() n'est pas transmise, elle est par défaut définie sur 0 . La fonction crée un objet qui génère des tuples composés de l'index de l'élément et de cet élément lui-même.

 scores = [54,67,48,99,27] for i, score in enumerate(scores):   print(i, score) 

Un tel code s'est avéré être beaucoup plus propre que le code de l'exemple précédent. Nous avons laissé le travail avec la liste des index, nous parcourons les valeurs elles-mêmes, obtenons un accès direct à elles dans la boucle for, et voyons les valeurs avec lesquelles nous travaillons dans la déclaration du cycle.

Voici une fonctionnalité intéressante qui plaira à ceux qui ont besoin d'afficher des listes numérotées pour que le numéro du premier élément ne soit pas 0 , conformément à son index, mais 1 . Habituellement, pour ce faire, vous devez modifier le numéro affiché de l'élément. Par exemple - comme ceci: i + 1 . Lorsque vous utilisez la fonction enumerate() , il suffit de lui passer, comme deuxième argument, le numéro à partir duquel vous souhaitez commencer la numérotation. Dans notre cas - 1 :

 scores = [54,67,48,99,27] for i, score in enumerate(scores, 1):   print(i, score) """ 1 54 2 67 3 48 4 99 5 27 """ 

Résumé


J'espère que cette courte histoire sur les boucles en Python vous a permis d'apprendre quelque chose de nouveau sur ce langage.

Chers lecteurs! Connaissez-vous d'autres façons d'utiliser la fonction enumerate() ? Les boucles construites en utilisant enumerate() semblent-elles plus lisibles que les boucles construites en utilisant range(len()) ?

Source: https://habr.com/ru/post/fr485648/


All Articles