map
y filter
son a menudo intercambiables con listas de comprensión, pero reduce
no se reemplaza tan fácilmente como map
y filter
(y además, en algunos casos, prefiero la sintaxis funcional de todos modos). Sin embargo, cuando necesitas operar con los argumentos, me encuentro realizando gimnasia sintáctica y eventualmente tengo que escribir funciones enteras para mantener la legibilidad.¿Se puede aplicar una operación directamente a argumentos dentro del mapa/reducir/filtrar?
Voy a usar map
para mantener la ilustración de la prueba de unidad simple, pero tenga en cuenta que los casos de uso de la vida real pueden ser más difíciles de expresar como una lista de comprensión.
He encontrado dos maneras complicadas de hacerlo, pero nada que alguna vez realmente use.
[afunc(*i) for i in aniter] == map(afunc, *zip(*aniter))
[afunc(*i) for i in aniter] == map(lambda i: apply(afunc, i), aniter)
¿Hay alguna forma concisa y elegante de expresar el lado derecho de estas expresiones?
Agradable, uso itertools todo el tiempo, pero por alguna razón no se me ocurrió buscar esto. – kojiro
+1 para el excelente enlace de recetas Nunca me di cuenta de eso – Kos