map
e filter
sono spesso intercambiabili con list comprehension, ma reduce
non è così facilmente scambiato fuori come map
e filter
(e oltre, in alcuni casi, io preferisco ancora la sintassi funzionale in ogni caso). Quando è necessario operare sugli argomenti stessi, tuttavia, mi trovo a passare attraverso la ginnastica sintattica e alla fine devo scrivere intere funzioni per mantenere la leggibilità.Puoi applicare un'operazione direttamente agli argomenti all'interno di map/reduce/filter?
Userò map
per mantenere il test dell'unità di illustrazione semplice, ma tieni presente che i casi di utilizzo nella vita reale potrebbero essere più difficili da esprimere come una lista di comprensione.
Ho trovato due modi disordinati per farlo, ma nulla che avrei mai effettivamente utilizzato.
[afunc(*i) for i in aniter] == map(afunc, *zip(*aniter))
[afunc(*i) for i in aniter] == map(lambda i: apply(afunc, i), aniter)
Esiste un modo conciso ed elegante per esprimere il lato destro di queste espressioni?
Bello, io uso itertools tutto il tempo, ma per qualche motivo non mi è venuto in mente di guardare lì per questo. – kojiro
+1 per il link delle eccellenti ricette! Non l'ho mai notato – Kos