Transformer les articles de iterable avec une suite de fonctions unaires
-
18-09-2019 - |
Question
Je me retrouve souvent besoin d'appliquer une séquence de fonctions unaires à une séquence de la même longueur. Ma première pensée est d'aller avec map()
, mais cela ne prend qu'une seule fonction à appliquer à tous les éléments dans la séquence.
Je souhaite Dans le code suivant, par exemple, d'appliquer str.upper()
au premier élément, et int
au deuxième point dans chaque a
. « transform
» est un espace réservé pour l'effet que je suis après.
COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()])
Y at-il une bibliothèque standard, ou une autre belle mise en œuvre qui peut effectuer une transformation comme celle-ci d'une manière ordonnée?
La solution
Qu'en est-il ...:
def transform(functions, arguments):
return [f(a) for f, a in zip(functions, arguments)]
Autres conseils
>>> 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)]
J'utilise actuellement ceci:
def transform(unaries, iterable):
return map(lambda a, b: a(b), unaries, iterable)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow