Aplatir des listes superficielles avec des itérables en Python
En Python, aplatir une liste superficielle, où chaque élément est lui-même un itérable, peut poser des défis . Cet article explore plusieurs façons d'aplatir efficacement ces listes, en donnant la priorité aux performances et à la clarté du code.
Approches :
Compréhension des listes
Tenter d'utiliser une compréhension de liste imbriquée peut générer des NameErrors en raison de variables non définies dans la boucle imbriquée :
[image for image in menuitem for menuitem in list_of_menuitems]
Réduire avec la fonction Lambda :
L'utilisation de la réduction avec une fonction lambda offre une solution simple :
reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
Cependant, la lisibilité de cette approche peut souffrir en raison de l'utilisation de list(x).
Itertools.chain()
Itertools.chain() fournit une méthode efficace et élégante pour aplatir les listes superficielles. Il concatène de manière transparente les itérables en un seul itérable :
from itertools import chain list(chain(*list_of_menuitems))
Cette approche évite les copies redondantes et offre des performances comparables à réduire.
Itertools.chain.from_iterable ()
Pour plus de clarté, pensez à utiliser itertools.chain.from_iterable() :
chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]]) print(list(chain))
Cela exprime explicitement l'aplatissement sans utiliser la magie des opérateurs.
Conclusion :
Itertools.chain() et ses variantes offrent des méthodes efficaces et lisibles pour aplatir les listes superficielles, prioriser les performances et le code clarté. Tenez compte du cas d'utilisation spécifique et des préférences de lisibilité lors de la sélection d'une approche.
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!