Appiattimento di un elenco superficiale in Python

| | |

C'è un modo semplice per appiattire un elenco di iterabili con una comprensione dell'elenco o, in mancanza, quale considerereste il modo migliore per appiattire un elenco superficiale come questo, bilanciando prestazioni e leggibilità?

Ho provato ad appiattire un elenco del genere con una comprensione dell'elenco annidato, come questo:

[image for image in menuitem for menuitem in list_of_menuitems] 

Ma ho problemi con la varietà NameError lì, perché il nome "menuitem" non è definito. Dopo aver cercato su Google e guardando in giro Stack Overflow, ho ottenuto i risultati desiderati con un'istruzione reduce:

reduce(list.__add__, map(lambda x: list(x ), list_of_menuitems)) 

Ma questo metodo è abbastanza illeggibile perché ho bisogno che list(x) chiami lì perché x è un Django QuerySet oggetto.

Conclusione:

Grazie a tutti coloro che hanno contribuito a questa domanda. Ecco un riassunto di ciò che ho imparato. Lo sto anche trasformando in un wiki della comunità nel caso in cui altri vogliano aggiungere o correggere queste osservazioni.

La mia istruzione di riduzione originale è ridondante ed è meglio scrivere in questo modo:

>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems)) 

Questa è la sintassi corretta per la comprensione di un elenco annidato (riassunto brillante dF!):

>>> [immagine per mi in list_of_menuitems per immagine in mi] 

Ma nessuno di questi metodi è efficiente quanto l'utilizzo di itertools.chain:

>>> ; da itertools import chain >>> list(chain(*list_of_menuitems)) 

E come osserva @cdleary, probabilmente è meglio evitare * la magia dell'operatore usando chain.from_iterable in questo modo:

>>> catena = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]]) >>> print(elenco(catena)) >>> [1, 2, 3, 5, 89, 6] 

Ci auguriamo che questo articolo ti abbia aiutato a risolvere il problema. Oltre a Appiattimento di un elenco superficiale in Python, controlla altri argomenti relativi a around.

Vuoi eccellere in Python? Consulta la nostra recensione dei migliori corsi online Python 2022. Se sei interessato alla scienza dei dati, controlla anche come imparare a programmare in R.

A proposito, questo materiale è disponibile anche in altre lingue:



Oliver Chamberlet

Berlin | 2022-11-27

Grazie per le spiegazioni! Sono rimasto bloccato con Appiattimento di un elenco superficiale in Python per alcune ore, finalmente l'ho fatto 🤗. Tornerò domani con un feedback

Carlo Jackson

Shanghai | 2022-11-27

Semplice e chiaro. Grazie per la condivisione. Il mio punto debole è sempre stato il Appiattimento di un elenco superficiale in Python e altri problemi con il readability 😁. Lo userò nella mia tesi di laurea

Olivia Robinson

London | 2022-11-27

Semplice e chiaro. Grazie per la condivisione. Il mio punto debole è sempre stato il Appiattimento di un elenco superficiale in Python e altri problemi con il around 😁. Controllato ieri, funziona!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

Common xlabel/ylabel for matplotlib subplots

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

12 answers

NUMPYNUMPY

Flake8: Ignore specific warning for entire file

12 answers

NUMPYNUMPY

glob exclude pattern

12 answers

NUMPYNUMPY

How to avoid HTTP error 429 (Too Many Requests) python

12 answers

NUMPYNUMPY

Python CSV error: line contains NULL byte

12 answers

NUMPYNUMPY

csv.Error: iterator should return strings, not bytes

12 answers

News


Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

sin

How to specify multiple return types using type-hints

exp

Printing words vertically in Python

exp

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries

cos

Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically