2012-10-03 12 views
20

मैं कुछ लैम्ब्डा कार्यों को लिख रहा था और इसे समझ नहीं पाया। क्या Python में lambda x: x if (x<3) जैसे कुछ करने का कोई तरीका है? lambda a,b: a if (a > b) else b ठीक काम करता है। अब तक lambda x: x < 3 and x or None मुझे सबसे नज़दीक लगता है।पाइथन लैम्ब्डा के साथ अगर बिना

उत्तर

36

किसी भी समारोह की तरह लैम्बडा, वापसी मूल्य होना चाहिए।

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] 
+0

@ उबंटू - धन्यवाद। निश्चित नहीं है कि मुझे क्यों लगता है कि इसे निर्दिष्ट किए बिना इसे वापस नहीं करना चाहिए। – root

+3

यह एक उचित धारणा है क्योंकि कार्य डिफ़ॉल्ट रूप से कोई नहीं लौटाता है। याद रखने की महत्वपूर्ण बात यह है कि 'lambda x:' का पालन करने वाला एक * अभिव्यक्ति * होना चाहिए, एक कथन नहीं। – unutbu

+3

@root मुझे कभी-कभी 'लैम्ब्डा' के बारे में सोचने में आसान लगता है, हालांकि इसे वास्तव में 'डीफ लैम्ब्डा (एक्स, वाई) के रूप में लिखा गया है: वापसी ... ' –

6

lambda x: x if x < 3 else None के साथ क्या गलत है?

+0

मेरी समझ है कि सूची समझ इस परिदृश्य – zinking

+0

में अधिक उपयुक्त है सवाल यात्रा का उल्लेख नहीं करता है, इसलिए मुझे यकीन है कि तुम क्या मतलब है नहीं कर रहा हूँ। क्या आप विस्तार से समझा सकते हैं? – user4815162342

+0

आप सही हैं, यह शायद अनुमान लगाया गया है। -_- – zinking

2

ज़ोंबी को पुन: स्थापित करने के लिए खेद है।

मैं एक ही प्रश्न का उत्तर के लिए देख रहा था, और मैंने पाया "फिल्टर" प्रदान की है कि मैं वास्तव में क्या देख रहा था:

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

कार्यान्वयन दोनों 2.x और 3 में एक ही है। एक्स: https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter

1

तुम हमेशा सशर्त जांच के लिए 'फिल्टर' को लागू करने की कोशिश कर सकते हैं। मूल रूप से, map() को पुनरावृत्तियों की हर घटना पर काम करना है, इसलिए यह चुन और चुन नहीं सकता है। लेकिन फिल्टर विकल्पों को कम करने में मदद कर सकता है। उदाहरण के लिए, मैं 1 से 1 9 तक एक सूची बनाता हूं लेकिन के वर्गों के केवल एक संख्या बनाने के लिए चाहता हूं।

x = list(range(1,20)) 

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

print (y) 
संबंधित मुद्दे