¿Hay Python idiomático y/o elegante para comprimir y aplicando una lista de funciones sobre una lista de valores?Comprueba y aplica una lista de funciones sobre una lista de valores en Python
Por ejemplo, suponga que tiene una lista de funciones:
functions = [int, unicode, float, lambda x: '~' + x + '~']
y una lista de valores:
values = ['33', '\xc3\xa4', '3.14', 'flange']
¿Hay una manera de aplicar la función i por valor de ITH y el retorno una lista de la misma longitud de los valores transformados, mientras se evita esta lista fea de comprensión?
[functions[i](values[i]) for i in range(len(functions))] # <- ugly
Lo que yo quiero es algo así como zip()
+ map()
(zipmap()
!) La lista de funciones con la lista de valores y tener las funciones pueden aplicar a sus valores apareados. Pensé que itertools
podría ofrecer algo relevante, pero funciones como imap
y starmap
son para mapear una única función sobre una iterable, no una iterable de funciones sobre otra iterable.
estoy inclinado a decir que la tarea que está deseando es un poco feo en sí, por lo que uno debe esperar que la aplicación sea - como tú lo juzgas, feo también. – msw
@msw Creo que la tarea es bastante común: piense en transformar cadenas de bytes sin procesar a objetos de Python desde un archivo CSV o similar, de modo que la lista de funciones pueda provenir de una asignación de columnas que contenga otros metadatos como los datos de la columna, etc. –
@msw: asómese dentro de una base de datos promedio y vea qué feo puede crecer una base de datos cuando nadie se molesta en escribir un código feo para validarlo. –