Maison  >  Article  >  développement back-end  >  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
DDDoriginal
2024-10-29 14:30:02452parcourir

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>

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>

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>

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>

Pour des cas plus simples, tels que :

<code class="python">[exp1 for x in xSet for y in ySet] </code>

c'est équivalent à :

<code class="python">result = [] 
for x in xSet:
  for y in ySet: 
    result.append(exp1)</code>

alors que,

<code class="python">[[exp1 for x in xSet] for y in ySet]</code>

est équivalent à :

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

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>

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>

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!

Déclaration:
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