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'