পাইথনে ল্যাম্বদা দিয়ে কীভাবে বাছাই করা যায়


179

পাইথনে, আমি ল্যাম্বদা দিয়ে তারিখ অনুসারে বাছাই করার চেষ্টা করছি। আমি আমার ত্রুটির বার্তাটি বুঝতে পারি না। বার্তাটি হ'ল:

<lambda>() takes exactly 1 argument (2 given)

আমার কাছে লাইনটি

a = sorted(a, lambda x: x.modified, reverse=True)

8
কীওয়ার্ড আর্গুমেন্ট কী যোগ করুন = ল্যাম্বদা এক্স: এক্স.মডিফাইড সমস্যার সমাধান করবে
শাহজাপান

উত্তর:


325

ব্যবহার

a = sorted(a, key=lambda x: x.modified, reverse=True)
#             ^^^^

পাইথন ২.x এ, sortedফাংশনটি এই ক্রমে তার আর্গুমেন্ট গ্রহণ করে:

sorted(iterable, cmp=None, key=None, reverse=False)

সুতরাং ছাড়া key=, আপনি যে ফাংশনটি পাস করবেন এটি একটি cmpফাংশন হিসাবে বিবেচিত হবে যা 2 টি আর্গুমেন্ট নেয়।


13
এই অভিজ্ঞতা থেকে পাস করে কীওয়ার্ড প্যারামিটারের প্রশংসা করতে আপনার কাছে ভাল সুযোগ রয়েছে।
টনি ভিজালাইনেন

1
এটি খুব পুরানো তবে, ত্রুটি কোডটি কেন বিভ্রান্তিকর হচ্ছে তা আপনার কোনও ধারণা আছে? আপনার উত্তরটি মনে হচ্ছে সম্ভাব্য পাইথন lambdaঅন্য প্যারামিটার সরবরাহ করছে যেহেতু কোনও cmpফাংশন 2 নেয়?
সুপারবিসাইডম্যান

@ সুপারবাইজডম্যান ত্রুটিটি বিভ্রান্তিকর নয়। cmp, একটি তুলনামূলক ফাংশন দুটি আর্গুমেন্ট লাগে। আপনি যদি পাস করে যাচ্ছেন তা যদি নির্দিষ্ট না keyকরে থাকেন তবে এটি ফাংশন পরামিতিগুলির অর্ডার থেকে ধরে নেওয়া হয় যে আপনি কোনও তুলনামূলক পাস করছেন। আপনার ল্যাম্বদা একটি প্যারামিটার নেয়, সুতরাং এটি কোনও বৈধ তুলনাকারী নয় এবং ত্রুটিটি এটিই বলে।
জিজোর

19
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)

এটি নিম্নলিখিত হিসাবে মুদ্রণ করা হবে:

[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]

এটি স্ট্রিং পূর্ণসংখ্যার জন্য কাজ করে না। এটা দেখ! lst = [('999', '9'), ('303', '30'), ('343', '34')] lst.sort (কী = ল্যাম্বদা x: x [1]) মুদ্রণ (lst )
ড্যানিয়েল কুয়া

ফলাফল [('303', '30'), ('343', '34'), ('999', '9')] যা প্রতিটি তালিকার দ্বিতীয় উপাদানের ভিত্তিতে বাছাই করা হয় না।
ড্যানিয়েল কুয়া

lst = [('ক্যান্ডি', '999', '9'), ('আপেল', '303', '30'), ('বেবি', '343', '34')] lst.sort (কী = ল্যাম্বদা এক্স: x [2]) মুদ্রণ (lst)
ড্যানিয়েল কুয়া

[('আপেল', '303', '30'), ('বেবি', '343', '34'), ('ক্যান্ডি', '999', '9')] যা 2 উপাদানের উপর ভিত্তি করেও সাজানো হয় না!
ড্যানিয়েল কুয়া

8

পাইথন তালিকাগুলিতে ডেটা বাছাই করার দুটি অন্তর্নির্মিত উপায় রয়েছে:

sort()  A method that modifies the list in-place
sorted()  A built-in function that builds a new sorted list from an iterable

আপনার প্রয়োজনের ভিত্তিতে আপনি এই দুটিয়ের মধ্যে চয়ন করতে পারেন:

আপনি যদি মূল তালিকা রাখতে চান তবে আপনি বাছাই করা ফাংশন ব্যবহার করতে পারেন বা যদি আপনার মূল তালিকার প্রয়োজন না হয় তবে আপনি বাছাই করুন ফাংশন ব্যবহার করতে পারেন।

বাছাই বা সাজানোর আগে, আমাদের ল্যাম্বডা বুঝতে হবে।

একটি ল্যাম্বদা একটি বেনামি ফাংশন এবং একটি বেনামি ফাংশন এমন একটি ফাংশন যা নাম ছাড়াই সংজ্ঞায়িত করা হয়, এই পোস্টটি এটি বেশ সুন্দরভাবে ব্যাখ্যা করেছে বলে মনে হচ্ছে।

https://www.programiz.com/python-programming/anonymous-function

ল্যাম্বদা ফাংশনগুলি ইন-লাইন কল করার জন্য দুর্দান্ত কারণ তাদের কেবলমাত্র একটি এক্সপ্রেশন রয়েছে যা মূল্যায়ন এবং ফিরে পাওয়া যায়। ল্যাম্বদার জন্য এগুলি সিনট্যাক্সটি হ'ল:

লাম্বদা আর্গুমেন্ট: এক্সপ্রেশন

সাজানো ফাংশন কীভাবে ব্যবহার করতে হয় তা দেখুন:

student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2]) 

আউটপুট: [('ডেভ', 'বি', 10), ('জেন', 'বি', 12), ('জন', 'এ', 15)]

এখানে আমরা দেখতে পাচ্ছি তালিকার ছাত্র_তুপলগুলি রয়েছে শিক্ষার্থী মূল পরামিতির উপর ভিত্তি করে সাজানো হয়েছে [২]।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.