Aplatir des listes superficielles en Python
Aplatir une liste superficielle d'itérables est une opération courante en Python. Bien qu'il existe plusieurs approches, chacune offre des performances et une lisibilité variables.
1. Compréhension de liste
Une compréhension de liste imbriquée peut sembler aplatir une liste, mais elle entraîne une NameError puisque la variable utilisée dans la compréhension externe (par exemple, menuitem) n'est pas définie.
2. réduire
La fonction de réduction permet d'aplatir en utilisant list.__add__ comme opération de réduction. Cependant, cette méthode nécessite un appel list(x) supplémentaire pour convertir les objets Django QuerySet en listes.
3. itertools.chain
La fonction itertools.chain fournit une option plus efficace pour l'aplatissement des listes. Il utilise un générateur pour produire des éléments des itérables, évitant ainsi le besoin de copie ou de compréhension de liste.
Exemple de code :
import itertools list_of_menuitems = [['image00', 'image01'], ['image10'], []] # Flatten using list comprehension (not recommended) # [image for image in menuitem for menuitem in list_of_menuitems] # Flatten using reduce # reduce(list.__add__, (list(mi) for mi in list_of_menuitems)) # Flatten using itertools.chain flattened_list = list(itertools.chain(*list_of_menuitems))
La chaîne est la méthode préférée pour aplatir les listes superficielles en raison de sa performances et facilité d'utilisation. Il peut gérer n'importe quel itérable, y compris les QuerySets Django.
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!