تحويل العناصر من التكرار مع تسلسل من وظائف Unary
-
18-09-2019 - |
سؤال
كثيرا ما أجد نفسي بحاجة إلى تطبيق تسلسل من وظائف Unary إلى سلسلة من نفس الطول. فكرتي الأولى هي الذهاب مع 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