La meilleure source d'informations est le tutoriel officiel Python sur la compréhension de liste . Les compréhensions de liste sont presque les mêmes que pour les boucles for (certainement toute compréhension de liste peut être écrite comme une boucle for) mais elles sont souvent plus rapides que l'utilisation d'une boucle for.
Regardez cette compréhension de liste plus longue dans le tutoriel (la if
partie filtre la compréhension, seules les parties qui passent l'instruction if sont passées dans la partie finale de la compréhension de la liste (ici (x,y)
):
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
C'est exactement la même chose que cette boucle imbriquée for (et, comme le dit le tutoriel, notez comment l'ordre de for et if sont les mêmes).
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
La principale différence entre une compréhension de liste et une boucle for est que la dernière partie de la boucle for (où vous faites quelque chose) vient au début plutôt qu'à la fin.
Passons à vos questions:
Quel type d'objet doit-il être pour pouvoir l'utiliser pour la structure de la boucle?
Un itérable . Tout objet pouvant générer un ensemble (fini) d'éléments. Ceux-ci incluent tout conteneur, listes, ensembles, générateurs, etc.
Quel est l'ordre dans lequel i et j sont affectés aux éléments dans l'objet?
Ils sont affectés exactement dans le même ordre qu'ils sont générés à partir de chaque liste, comme s'ils étaient dans une boucle for imbriquée (pour votre première compréhension, vous obtiendrez 1 élément pour i, puis chaque valeur de j, 2ème élément dans i, puis chaque valeur de j, etc.)
Peut-il être simulé par une structure de boucle for différente?
Oui, déjà montré ci-dessus.
Cette boucle for peut-elle être imbriquée avec une structure for loop similaire ou différente? Et à quoi cela ressemblerait-il?
Bien sûr, mais ce n'est pas une bonne idée. Ici, par exemple, vous donne une liste de listes de caractères:
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]