Esiste un Python idiomatico e/o elegante per zippare e applicare un elenco di funzioni su un elenco di valori?Zip e applicare un elenco di funzioni su un elenco di valori in Python
Ad esempio, si supponga di avere una lista di funzioni:
functions = [int, unicode, float, lambda x: '~' + x + '~']
e un elenco di valori:
values = ['33', '\xc3\xa4', '3.14', 'flange']
C'è un modo per applicare la funzione i-esimo al valore-esima e ritorno una lista della stessa lunghezza dei valori trasformati, evitando questa brutta lista di comprensione?
[functions[i](values[i]) for i in range(len(functions))] # <- ugly
Quello che voglio è qualcosa di simile zip()
+ map()
(zipmap()
!) L'elenco delle funzioni con l'elenco dei valori e hanno le funzioni di essere applicati ai loro valori associati. Ho pensato che itertools
potrebbe offrire qualcosa di rilevante, ma funzioni come imap
e starmap
sono per mappare una singola funzione su un iterabile, non un iterable di funzioni su un altro iterabile.
Sono propenso a dire che il compito che si sta desiderando è una specie di brutto in sé, quindi ci si dovrebbe aspettare l'attuazione di essere - come tu lo giudichi - anche brutto. – msw
@msw Penso che il compito sia piuttosto comune - pensa di trasformare i grezzi bytestrings in oggetti Python da un file CSV o simili, quindi l'elenco di funzioni potrebbe provenire da una colonna che contiene altri metadati come i dati della colonna, ecc. –
@msw: Metti la testa dentro un database medio e vedi quanto può essere brutto un database quando nessuno si preoccupa di scrivere un brutto codice per convalidarlo. –