سؤال

كنت أكتب بعض وظائف لامدا ولم أتمكن من معرفة ذلك.هل هناك طريقة للحصول على شيء من هذا القبيل lambda x: x if (x<3) في بيثون؟مثل lambda a,b: a if (a > b) else b يعمل بشكل جيد.حتى الآن lambda x: x < 3 and x or None يبدو أنه الأقرب الذي وجدته.

هل كانت مفيدة؟

المحلول

لامدا، مثل أي وظيفة، يجب أن يكون لها قيمة إرجاع.

lambda x: x if (x<3) لا يعمل لأنه لا يحدد ما يجب العودة إذا لم يكن كذلك x<3.افتراضيا تعود الوظائف None, ، حتى تتمكن من القيام بذلك

lambda x: x if (x<3) else None

ولكن ربما ما تبحث عنه هو قائمة الفهم مع if حالة.على سبيل المثال:

In [21]: data = [1, 2, 5, 10, -1]

In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]

نصائح أخرى

ما المشكلة في lambda x: x if x < 3 else None?

آسف لإنعاش الزومبي.

كنت أبحث عن إجابة لنفس السؤال، ووجدت أن "الفلتر" يقدم بالضبط ما كنت أبحث عنه:

>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]

التنفيذ هو نفسه في كل من الإصدارين 2.x و3.x:https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter

يمكنك دائمًا محاولة استدعاء "عامل التصفية" لعمليات التحقق الشرطية.في الأساس، map() يجب أن يعمل على كل حدث للتكرارات، لذلك لا يمكنه الانتقاء والاختيار.لكن الفلتر قد يساعد في تضييق نطاق الاختيارات.على سبيل المثال، قمت بإنشاء قائمة من 1 إلى 19 ولكني أريد إنشاء صف ل مربعات من الأعداد الزوجية فقط.

x = list(range(1,20))

y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))

print (y)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top