Verwandeln Sie Elemente aus iterable mit einer Folge von einstelligen Funktionen
-
18-09-2019 - |
Frage
ich mich häufig benötigen finde eine Folge von einstelligen Funktionen zu einer Sequenz von der gleichen Länge anzuwenden. Mein erster Gedanke ist mit map()
zu gehen, aber das dauert nur eine einzige Funktion auf alle Elemente in der Reihenfolge angewandt werden.
Im folgenden Code beispielsweise möchte ich str.upper()
auf das erste Element, und int
mit dem zweiten Element in jeder a
anzuwenden. „transform
“ ist ein Platzhalter für den Effekt, den ich bin nach.
COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()])
Gibt es eine Standardbibliothek oder andere nette Implementierung, die eine Transformation wie diese ordentlich ausführen kann?
Lösung
Was ist mit ...:
def transform(functions, arguments):
return [f(a) for f, a in zip(functions, arguments)]
Andere Tipps
>>> 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)]
Ich bin derzeit so aus:
def transform(unaries, iterable):
return map(lambda a, b: a(b), unaries, iterable)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow