Transformar artículos de iterable con una secuencia de funciones unarios
-
18-09-2019 - |
Pregunta
Con frecuencia me encuentro que necesitan para aplicar una secuencia de funciones unarios a una secuencia de la misma longitud. Mi primer pensamiento es ir con map()
, sin embargo, esto sólo se necesita una única función que se aplicará a todos los elementos de la secuencia.
En el siguiente código, por ejemplo, Deseo solicitar str.upper()
al primer elemento, y int
al segundo elemento de cada a
. "transform
" es un marcador de posición para el efecto que busco.
COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()])
¿Hay alguna biblioteca estándar, u otra aplicación agradable que puede realizar una transformación de este tipo limpiamente?
Solución
¿Qué hay de ...:
def transform(functions, arguments):
return [f(a) for f, a in zip(functions, arguments)]
Otros consejos
>>> s="pid,5 user,8 program,28 dev,10 sent,9 received,15".split()
>>> [ ( m.upper(),int(n)) for m, n in [i.split(",") for i in s ] ]
[('PID', 5), ('USER', 8), ('PROGRAM', 28), ('DEV', 10), ('SENT', 9), ('RECEIVED', 15)]
Actualmente estoy usando esto:
def transform(unaries, iterable):
return map(lambda a, b: a(b), unaries, iterable)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow