سؤال

كثيرا ما أجد نفسي بحاجة إلى تطبيق تسلسل من وظائف 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top