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?

War es hilfreich?

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
scroll top