पाइथन में लैम्बडा के साथ कैसे सॉर्ट करें


179

पाइथन में, मैं लंबोदर के साथ डेट करने की कोशिश कर रहा हूं। मैं अपना त्रुटि संदेश नहीं समझ सकता। संदेश है:

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

मेरे पास जो लाइन है

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

8
Add keywoard तर्क कुंजी = lambda x: x.modified समस्या का समाधान करेगा
shahjapan

जवाबों:


325

उपयोग

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

पायथन 2.x पर, sortedइस क्रम में फ़ंक्शन अपने तर्क देता है:

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

तो इसके बिना key=, आपके द्वारा पास किए जाने वाले फ़ंक्शन को एक cmpफ़ंक्शन माना जाएगा जो 2 तर्क लेता है।


13
आपके पास इस अनुभव से गुजरने वाले कीवर्ड पैरामीटर की सराहना करने का अच्छा मौका है।
टोनी वेजालिनेन

1
यह बहुत पुराना है, लेकिन क्या आपको पता है कि त्रुटि कोड भ्रामक क्यों है? आपका उत्तर लगता है कि संभव है कि पायथन lambdaएक अन्य पैरामीटर के साथ आपूर्ति कर रहा है क्योंकि एक cmpफ़ंक्शन 2 लेता है?
सुपरबीजमैन मैन

@SuperBiasedMan त्रुटि भ्रामक नहीं है। cmp, एक तुलनित्र फ़ंक्शन दो तर्क लेता है। यदि आप निर्दिष्ट नहीं करते हैं कि आप एक पास कर रहे हैं key, तो यह फ़ंक्शन पैरामीटर क्रम से माना जाता है कि आप एक तुलनित्र पास कर रहे हैं। आपका लैम्ब्डा एक पैरामीटर लेता है, इसलिए एक वैध तुलनित्र नहीं है और यही त्रुटि कहती है।
1846

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 = [('९९९ ’,' 9’), ('303 ’,) 30’), ((343 ’, 3 34’)] lst.sort (की = लैम्ब्डा x: x [1]) प्रिंट (lst) )
डैनियल कुआ

परिणाम [('303', '30'), ('343', '34'), ('999', '9')] है जो हर सूची में दूसरे तत्व के आधार पर क्रमबद्ध नहीं है।
डैनियल कुआ

lst = [('कैंडी', '999', '9'), ('सेब', '303', '30'), ('बेबी', '343', '34')] lst.sort (कुंजी) = लैम्ब्डा x: 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)]

यहाँ हम यह देख सकते हैं कि छात्र_टुप्लस होने पर ट्यूपल्स को मुख्य पैरामीटर के आधार पर क्रमबद्ध किया गया है बशर्ते कि वह छात्र है [2]।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.