"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Les compréhensions de liste peuvent-elles avoir des itérateurs dépendants ?

Les compréhensions de liste peuvent-elles avoir des itérateurs dépendants ?

Publié le 2024-12-21
Parcourir:227

 Can List Comprehensions Have Dependent Iterators?

Itérateurs indépendants dans la compréhension de liste

En Python, les compréhensions de liste autorisent plusieurs boucles d'itération. Prenons l'exemple suivant :

[(x, y) for x in a for y in b]

où a et b sont des séquences. Cette compréhension crée des paires d'éléments à partir du produit cartésien de a et b.

Les itérateurs peuvent-ils être dépendants ?

Un itérateur dans une compréhension de liste peut-il faire référence à un autre ? La réponse est oui, et le code suivant le démontre :

[x for x in a for a in b]

Dans cette compréhension, l'itérateur de boucle externe a devient l'itérateur pour la boucle intérieure. Cela aplatit efficacement une liste imbriquée.

Exemple

Si nous avons une liste imbriquée a :

a = [[1, 2], [3, 4]]

La compréhension de liste suivante l'aplatirait en une seule liste :

[x for x in a for a in b]

Résultat :

[1, 2, 3, 4]

Solution alternative utilisant des générateurs

Dans le code Python fourni, le texte est stocké sous forme de phrases et la tâche consiste à extraire une seule liste de mots. Voici comment y parvenir à l'aide d'un générateur :

text = (("Hi", "Steve!"), ("What's", "up?"))
gen = (word for sentence in text for word in sentence)

La variable gen donne désormais la liste aplatie de mots :

for word in gen:
    print(word)

Sortie :

Hi
Steve!
What's
up?
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3