lambda एक अनाम फ़ंक्शन है, यह इसके बराबर है:
def func(p):
return p.totalScore
अब maxबन जाता है:
max(players, key=func)
लेकिन defकथनों के रूप में वे कथनों का उपयोग किया जाता है, जहां अभिव्यक्ति की आवश्यकता होती है, इसलिए कभी-कभी उनका उपयोग lambdaकिया जाता है।
ध्यान दें कि lambdaआप एक रिटर्न स्टेटमेंट में क्या डालते हैं, उसके बराबर है def। इस प्रकार, आप क के अंदर कथनों का उपयोग नहीं कर सकते lambda, केवल अभिव्यक्ति की अनुमति है।
क्या करता maxहै?
अधिकतम (ए, बी, सी, ... [, कुंजी = दुर्गंध) -> मूल्य
एक एकल पुनरावृत्त तर्क के साथ, इसकी सबसे बड़ी वस्तु लौटाते हैं। दो या अधिक तर्कों के साथ, सबसे बड़ा तर्क लौटाएं।
तो, यह केवल उस वस्तु को वापस करता है जो सबसे बड़ी है।
कैसे keyकाम करता है ?
पायथन 2 में डिफ़ॉल्ट रूप से वस्तुओं के प्रकार के आधार पर नियमों केkey एक सेट के आधार पर वस्तुओं की तुलना करता है (उदाहरण के लिए एक स्ट्रिंग हमेशा एक पूर्णांक से अधिक होता है)।
तुलना करने से पहले वस्तु को संशोधित करने के लिए, या किसी विशेष विशेषता / सूचकांक के आधार पर तुलना करने के लिए, आपको keyतर्क का उपयोग करना होगा ।
उदाहरण 1:
एक सरल उदाहरण, मान लीजिए कि आपके पास स्ट्रिंग रूप में संख्याओं की एक सूची है, लेकिन आप उन वस्तुओं की उनके पूर्णांक मान से तुलना करना चाहते हैं।
>>> lis = ['1', '100', '111', '2']
यहां maxउनके मूल मूल्यों का उपयोग करके आइटम की तुलना की जाती है (स्ट्रिंग्स की तुलना लेक्सिकोग्राफिक रूप से की जाती है ताकि आपको '2'आउटपुट के रूप में मिलें):
>>> max(lis)
'2'
keyएक साधारण के साथ उनके पूर्णांक मूल्य के उपयोग द्वारा वस्तुओं की तुलना करने के लिए lambda:
>>> max(lis, key=lambda x:int(x)) # compare `int` version of each item
'111'
उदाहरण 2: maxट्यूपल्स की सूची पर लागू करना।
>>> lis = [(1,'a'), (3,'c'), (4,'e'), (-1,'z')]
डिफ़ॉल्ट रूप maxसे पहले इंडेक्स द्वारा आइटम की तुलना करेंगे। यदि पहला इंडेक्स समान है तो वह दूसरे इंडेक्स की तुलना करेगा। मेरे उदाहरण के अनुसार, सभी आइटमों में एक अद्वितीय पहला सूचकांक होता है, इसलिए आपको इसका उत्तर मिलेगा:
>>> max(lis)
(4, 'e')
लेकिन, क्या होगा यदि आप इंडेक्स 1 के मूल्य से प्रत्येक आइटम की तुलना करना चाहते हैं? सरल: उपयोग lambda:
>>> max(lis, key = lambda x: x[1])
(-1, 'z')
विभिन्न प्रकार की वस्तुओं वाले पुनरावृत्तियों में वस्तुओं की तुलना करना :
मिश्रित वस्तुओं के साथ सूची:
lis = ['1','100','111','2', 2, 2.57]
पायथन 2 में दो अलग-अलग प्रकार की वस्तुओं की तुलना करना संभव है :
>>> max(lis) # works in Python 2
'2'
>>> max(lis, key=lambda x: int(x)) # compare integer version of each item
'111'
लेकिन पायथन 3 में आप ऐसा नहीं कर सकते :
>>> lis = ['1', '100', '111', '2', 2, 2.57]
>>> max(lis)
Traceback (most recent call last):
File "<ipython-input-2-0ce0a02693e4>", line 1, in <module>
max(lis)
TypeError: unorderable types: int() > str()
लेकिन यह काम करता है, क्योंकि हम प्रत्येक वस्तु के पूर्णांक संस्करण की तुलना कर रहे हैं:
>>> max(lis, key=lambda x: int(x)) # or simply `max(lis, key=int)`
'111'