Ho un metodo che prende una lista e restituire un oggettoPython: come impostare la variabile locale nella comprensione degli elenchi?
# input a list, returns an object
def map_to_obj(lst):
a_list = f(lst)
return a_list[0] if a_list else None
voglio ottenere un elenco che contiene tutti gli elementi mappati che non è None
.
Ti piace questa:
v_list = [v1, v2, v3, v4]
[map_to_obj(v) for v in v_list if map_to_obj(v)]
Ma sembra non è bene chiamare il metodo map_to_obj
due volte nella lista di comprensione.
C'è un modo per avere variabili locali nella comprensione delle liste in modo che possa avere prestazioni migliori?
Oppure il compilatore lo ottimizza automaticamente?
Ecco quello che voglio:
(sml like)
[let mapped = map_to_obj(v) in for v in v_list if mapped end]
È una bella risposta. Le risposte non dovrebbero avere punti interrogativi. – Paul
È una risposta soddisfacente e, naturalmente, è la stessa di [behzad] (http://stackoverflow.com/users/625914/behzad-nouri), con una comprensione delle liste al posto di 'map' e' filter' ... Ho intenzione di andare su di nuovo come mi piaceva come [Lying Dog] (http: // StackOverflow.it/users/4134826/lying-dog) ha tradotto 'filter' in termini di l-c, ma l'OP può approvare una di queste risposte in quanto entrambe sono risposte utili e utili. – gboffi
La comprensione interiore dovrebbe essere un'espressione generatrice. Non c'è bisogno di costruire l'intera lista e solo poi buttare via gli oggetti vuoti per costruire ancora un altro elenco. –