Trasformare gli articoli da iterable con una sequenza di funzioni unari
-
18-09-2019 - |
Domanda
Mi capita spesso trovo a dover applicare una successione di funzioni unari ad una sequenza di della stessa lunghezza. Il mio primo pensiero è quello di andare con map()
, tuttavia questo richiede solo una singola funzione da applicare a tutti gli elementi della sequenza.
Nel codice seguente, ad esempio, desidero applicare str.upper()
al primo elemento, e int
al secondo punto in ogni a
. "transform
" è un segnaposto per l'effetto che sto cercando.
COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()])
C'è qualche libreria standard, o altro bel implementazione in grado di eseguire una trasformazione di questo tipo ordinatamente?
Soluzione
Che dire ...:
def transform(functions, arguments):
return [f(a) for f, a in zip(functions, arguments)]
Altri suggerimenti
>>> 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)]
Attualmente sto usando questo:
def transform(unaries, iterable):
return map(lambda a, b: a(b), unaries, iterable)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow