मैं कुछ लैम्ब्डा कार्यों को लिख रहा था और इसे समझ नहीं पाया। क्या Python में 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
के साथ क्या गलत है?
मेरी समझ है कि सूची समझ इस परिदृश्य – zinking
में अधिक उपयुक्त है सवाल यात्रा का उल्लेख नहीं करता है, इसलिए मुझे यकीन है कि तुम क्या मतलब है नहीं कर रहा हूँ। क्या आप विस्तार से समझा सकते हैं? – user4815162342
आप सही हैं, यह शायद अनुमान लगाया गया है। -_- – zinking
ज़ोंबी को पुन: स्थापित करने के लिए खेद है।
मैं एक ही प्रश्न का उत्तर के लिए देख रहा था, और मैंने पाया "फिल्टर" प्रदान की है कि मैं वास्तव में क्या देख रहा था:
>>> 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
तुम हमेशा सशर्त जांच के लिए 'फिल्टर' को लागू करने की कोशिश कर सकते हैं। मूल रूप से, 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)
@ उबंटू - धन्यवाद। निश्चित नहीं है कि मुझे क्यों लगता है कि इसे निर्दिष्ट किए बिना इसे वापस नहीं करना चाहिए। – root
यह एक उचित धारणा है क्योंकि कार्य डिफ़ॉल्ट रूप से कोई नहीं लौटाता है। याद रखने की महत्वपूर्ण बात यह है कि 'lambda x:' का पालन करने वाला एक * अभिव्यक्ति * होना चाहिए, एक कथन नहीं। – unutbu
@root मुझे कभी-कभी 'लैम्ब्डा' के बारे में सोचने में आसान लगता है, हालांकि इसे वास्तव में 'डीफ लैम्ब्डा (एक्स, वाई) के रूप में लिखा गया है: वापसी ... ' –