Comprendre les compréhensions en Python - pythoniste.fr (2024)

L’une de mes fonctionnalités préférées en Python est la compréhension de collections. Elles peuvent sembler un peu obscures au début, mais lorsque vous les décomposez, elles sont en fait très simples.

Compréhension de liste

La clé pour comprendre les compréhensions de liste est qu’elles ne sont que des boucles for sur une collection, exprimées dans une syntaxe plus concise et compacte. Prenons comme exemple la compréhension de liste suivante :

carres = [x * x for x in range(10)]

Elle calcule une liste de tous les nombres carrés entiers de 0 à 9 :

>>> carres[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Si nous voulions construire la même liste en utilisant une simple boucle for, nous écririons probablement quelque-chose comme ceci :

carres = []for x in range(10): carres.append(x * x)

C’est une boucle assez simple. Maintenant, si nous essayons de généraliser une partie de cette structure, nous pourrions nous retrouver avec un modèle similaire à celui-ci :

La compréhension de la liste ci-dessus est équivalente à la simple boucle for suivante :

valeurs = []for element in collection: valeurs.append(expression)

Encore une fois, il s’agit d’un modèle assez simple que vous pouvez appliquer à la plupart des boucles for. Il y a maintenant un autre élément utile que nous devons ajouter à ce modèle, et c’est le filtrage d’éléments avec des conditions.

Le filtrage d'éléments

Les compréhensions de liste peuvent filtrer les valeurs en fonction d’une condition arbitraire qui décide si la valeur résultante devient ou non une partie de la liste de sortie. Voici un exemple :

carres_entiers_pairs = [x * x for x in range(10) if x % 2 == 0]

Cette compréhension de liste calculera une liste des carrés de tous les entiers pairs de 0 à 9.

Si vous n’êtes pas familier avec ce que fait l’opérateur modulo (%), il renvoie le reste après division d’un nombre par un autre. Dans cet exemple, l’opérateur % nous donne un moyen simple de tester si un nombre est pair en vérifiant le reste après avoir divisé le nombre par 2.

>>> carres_entiers_pairs[0, 4, 16, 36, 64]

De la même manière que pour le premier exemple, cette nouvelle compréhension de liste peut être transformée en une boucle for équivalente :

carres_entiers_pairs = []for x in range(10): if x % 2 == 0: carres_entiers_pairs.append(x * x)

Essayons de généraliser à nouveau la compréhension de la liste ci-dessus. Cette fois, nous allons ajouter une condition de filtre à notre modèle pour décider quelles valeurs se retrouveront dans la liste résultante.

Voici le modèle de compréhension de liste :

valeurs = [expression for element in collection if condition]

La compréhension de la liste ci-dessus est équivalente à la boucle for suivante :

valeurs = []for element in collection: if condition: valeurs.append(expression)

Compréhension de sets et de dictionnaires

Python prend non seulement en charge les compréhensions de liste, mais a également une syntaxe similaire pour les sets et les dictionnaires.

Voici à quoi ressemble une compréhension de sets :

>>> { x * x for x in range(-9, 10) }set([64, 1, 36, 0, 49, 9, 16, 81, 25, 4])

Et maintenant une compréhension de dictionnaire :

>>> { x: x * x for x in range(5) }{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Les deux sont des outils utiles dans la pratique. De manière globale, il y a une mise en garde concernant les compréhensions en Python : à mesure que vous maîtrisez mieux leur utilisation, il devient de plus en plus facile d’écrire du code difficile à lire. Si vous ne faites pas attention, vous devrez peut-être bientôt faire face à des compréhensions monstrueuses de listes, de sets et de dictionnaires. N’oubliez pas que trop d’une bonne chose est généralement une mauvaise chose.

Personnellement, je trace la ligne rouge à ne pas franchir après deux boucles for imbriquées pour la compréhension. Je trouve que dans la plupart des cas, il est préférable (comme dans “plus lisible” et “plus simple à maintenir”) d’utiliser des boucles for classiques au-delà de ce point. Surtout qu’en termes de vitesse, la boucle for classique est toujours plus rapide que la compréhension de liste pour faire la même chose.

Le mot de la fin

Pour résumer ce que nous venons de voir :

  • Les compréhensions sont une caractéristique clé de Python. Les comprendre et les appliquer rendra votre code beaucoup plus Pythonique;
  • Les compréhensions ne sont que de la syntaxe sophistiquée pour un modèle de boucle for simple. Une fois que vous aurez compris le modèle, vous développerez une compréhension intuitive pour les compréhensions ;
  • Il y a plus que de simples compréhensions de listes.

Si vous avez apprécié, n’hésitez pas à partager. Sinon les commentaires sont là pour vos remarques.

articles récents

Améliorer l’exploitation de votre projet Python avec un Makefile

Python ,

Modèles et Validation de données en Python avec Pydantic

Pydantic ,

Gagner de l’argent en programmant en Python

Python ,

Commentaires récents

  • Christophe DELEUZE dans Qu’est-ce qu’un générateur en Python
  • Max dans Qu’est-ce qu’un générateur en Python
  • Johan dans Qu’est-ce qu’un générateur en Python
Comprendre les compréhensions en Python - pythoniste.fr (2024)

FAQs

What are the 4 types of comprehension in Python? ›

There are four types of comprehension in Python for different data types – list comprehension, dictionary comprehension, set comprehension, and generator comprehension.

What is comprehension in Python with examples? ›

Python, comprehension is a concise way to create a new list, set, or dictionary based on an existing iterable object. Comprehensions are more concise and readable than traditional looping constructs such as for and while loops, and they can often be more efficient as well.

What comprehensions does Python support? ›

Python supports the following 4 types of comprehension:
  • List Comprehensions.
  • Dictionary Comprehensions.
  • Set Comprehensions.
  • Generator Comprehensions.
Aug 18, 2023

What is the benefit of using comprehensions in Python? ›

Advantages of List Comprehension
  • It provides a more compact and readable way of creating a new list. ...
  • They execute faster than the traditional loop method because it uses a more optimized approach.
  • Using list comprehension, you don't need to create an empty list before appending items to it.
Mar 22, 2023

What are the 4 types of comprehension? ›

Comprehension skills are important to help students reach deeper meaning in the text. There is surface-level comprehension, which is important, but going into deeper meaning is the ultimate goal. There are four main types of comprehension that students focus on: literal, interpretive, critical and creative.

What are the 7 keys to comprehension? ›

  • Create mental images. Good readers create a wide range of visual, auditory, and other sensory images as they read, and they become emotionally involved with what they read.
  • Use background knowledge. ...
  • Ask questions. ...
  • Make inferences. ...
  • Determine the most important idea or themes. ...
  • Synthesize information. ...
  • Use “fix-up” strategies.

How to do set comprehension in Python? ›

The syntax for set comprehension comprises two parts: a new set and an expression that defines the value of each element within the set. It can incorporate a variable that takes each value within the iterable object and a conditional statement that filters the elements.

Can you give me an example of comprehension? ›

Any kind of mental grasping of an idea or a subject is a kind of comprehension. You might attempt comprehension of a curious situation, like the fact that your goofy roommate always manages to date models. Sometimes, such mysteries are beyond comprehension!

What are all the Python comprehensions? ›

Python Flow Control
  • Python if...else Statement.
  • Python for Loop.
  • Python while Loop.
  • Python break and continue.
  • Python pass Statement.

What Python language is good for? ›

Python is a general-purpose language, which means it's designed to be used in a range of applications, including data science, software and web development, automation, and generally getting stuff done.

What is a comprehension in coding? ›

The field that studies techniques for extracting information that helps to understand software is known as “Code Comprehension” or “Program Comprehension”.

How to create a list in Python? ›

To create a list in Python, write a set of items within square brackets ([]) and separate each item with a comma.

What are 3 benefits of Python? ›

Advantages/Benefits of Python
  • Presence of Third Party Modules: ...
  • Extensive Support Libraries: ...
  • Open Source and Community Development: ...
  • Learning Ease and Support Available: ...
  • User-friendly Data Structures: ...
  • Productivity and Speed:

Are Python comprehensions faster? ›

List comprehensions are generally faster than for loops for creating lists because they do not require the overhead of the loop construct.

What is the purpose of Python keywords? ›

A Python keyword is a word that serves a specific function in Python. It is limited to one single function and it can not be set as a variable name, a function name, or the value of any other identifier. The purpose of the keyword is to define the syntax of the code.

What are the 4 main data types in Python? ›

The data types in Python that we will look at in this tutorial are integers, floats, Boolean, and strings. If you are not comfortable with using variables in Python, our article on how to declare python variables can change that.

What are the 4 types of testing in Python 3? ›

There are four different types of tests, each depending on the granularity of code being tested, as well as the goal of the test.
  • Unit Tests. This tests specific methods and logic in the code. ...
  • Feature Tests. This tests the functionality of the component. ...
  • Integration Tests. ...
  • Performance Tests.

Top Articles
Latest Posts
Article information

Author: Greg Kuvalis

Last Updated:

Views: 6149

Rating: 4.4 / 5 (55 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Greg Kuvalis

Birthday: 1996-12-20

Address: 53157 Trantow Inlet, Townemouth, FL 92564-0267

Phone: +68218650356656

Job: IT Representative

Hobby: Knitting, Amateur radio, Skiing, Running, Mountain biking, Slacklining, Electronics

Introduction: My name is Greg Kuvalis, I am a witty, spotless, beautiful, charming, delightful, thankful, beautiful person who loves writing and wants to share my knowledge and understanding with you.