Преобразование элементов из итерируемых с помощью последовательности унарных функций
-
18-09-2019 - |
Вопрос
Мне часто приходится применять последовательность унарных функций к последовательности одинаковой длины.Моя первая мысль — пойти с map()
, однако для этого требуется применить только одну функцию ко всем элементам последовательности.
Например, в следующем коде я хочу применить str.upper()
к первому элементу и int
ко второму элементу в каждом a
. "transform
" — это заполнитель для эффекта, который мне нужен.
COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()])
Есть ли какая-нибудь стандартная библиотека или другая хорошая реализация, которая может аккуратно выполнить такое преобразование?
Решение
Как насчет...:
def transform(functions, arguments):
return [f(a) for f, a in zip(functions, arguments)]
Другие советы
>>> 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)]
В настоящее время я использую это:
def transform(unaries, iterable):
return map(lambda a, b: a(b), unaries, iterable)
Не связан с StackOverflow