Maison > développement back-end > Tutoriel Python > Comment fonctionnent les compréhensions de listes imbriquées en Python et quels sont leurs équivalents sous forme de boucle ?

Comment fonctionnent les compréhensions de listes imbriquées en Python et quels sont leurs équivalents sous forme de boucle ?

DDD
Libérer: 2024-10-29 14:30:02
original
503 Les gens l'ont consulté

How do Nested List Comprehensions in Python Work and What are Their Equivalents in Loop Form?

Comprendre la compréhension des listes imbriquées

Les compréhensions de listes offrent une syntaxe concise et élégante pour manipuler les collections en Python. En combinant des boucles for imbriquées, on peut facilement construire des structures de données complexes. Voici une description détaillée du fonctionnement des compréhensions de listes imbriquées :

Considérez la compréhension de liste donnée :

<code class="python">[(min([row[i] for row in rows]),max([row[i] for row in rows])) 
for i in range(len(rows[0]))]</code>
Copier après la connexion

Ce code est équivalent à la boucle suivante :

<code class="python">result = []
for i in range(len(rows[0])):
  innerResult = []
  for row in rows:
    innerResult.append(row[i])
  innerResult2 = []
  for row in rows:
    innerResult2.append(row[i])
  tuple = (min(innerResult), max(innerResult2))
  result.append(tuple)</code>
Copier après la connexion

En général, une compréhension de liste imbriquée de la forme :

<code class="python">[exp2([exp1 for x in xSet]) for y in ySet]</code>
Copier après la connexion

peut être traduite par :

<code class="python">result = []
for y in ySet:
  innerResult = []
  for x in xSet:
    innerResult.append(exp1)
  exp2Result = exp2(innerResult)
  result.append(exp2Result)</code>
Copier après la connexion

Pour des cas plus simples, tels que :

<code class="python">[exp1 for x in xSet for y in ySet] </code>
Copier après la connexion

c'est équivalent à :

<code class="python">result = [] 
for x in xSet:
  for y in ySet: 
    result.append(exp1)</code>
Copier après la connexion

alors que,

<code class="python">[[exp1 for x in xSet] for y in ySet]</code>
Copier après la connexion

est équivalent à :

<code class="python">result = []
for y in ySet:
  innerResult = []
  for x in xSet:
    innerResult.append(exp1)
  result.append(innerResult)</code>
Copier après la connexion

Il est important de noter que l'imbrication des boucles for dans un la compréhension d'une liste unique se fait toujours de gauche à droite. Par exemple :

<code class="python">[item for item in row for row in matrix] </code>
Copier après la connexion

Ce code ne fonctionnera pas car la variable de boucle interne 'row' n'est pas définie dans la boucle externe. La forme correcte est :

<code class="python">[item for row in matrix for item in row] </code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal