Mi è capitato di trovarmi con un'esigenza di filtraggio di base: ho un elenco e devo filtrarlo per un attributo degli elementi.
Il mio codice era simile al seguente:
my_list = [x for x in my_list if x.attribute == value]
Ma poi ho pensato, non sarebbe meglio scriverlo in questo modo?
my_list = filter(lambda x: x.attribute == value, my_list)
È più leggibile e, se necessario per le prestazioni, il lambda potrebbe essere rimosso per ottenere qualcosa.
La domanda è: ci sono avvertenze nell'usare il secondo modo? Qualche differenza di prestazioni? Mi manca del tutto Pythonic Way ™ e dovrei farlo in un altro modo (come usare itemgetter anziché lambda)?
filter
è un oggetto generatore di filtro e non un elenco.
filter
fosse più leggibile. Quando hai un'espressione semplice che può essere usata così com'è in un listcomp, ma deve essere racchiusa in un lambda (o similmente costruito dapartial
ooperator
funzioni, ecc.) Per passarefilter
, ecco quando vincono i listcomps.