2013-01-31 3 views
5

में लैम्ब्डा का उपयोग करके मैं सूची में कुछ क्रमबद्ध करने के लिए लैम्ब्डा डू का उपयोग करने की कोशिश कर रहा हूं। मैं जो करना चाहता था वह एक इंटिटल अधिग्रहण से अपने मैनहट्टन दूरी के आधार पर समन्वय को क्रमबद्ध करता है। मुझे पता है कि मेरे पास सिंटैक्स का अधिकांश हिस्सा है लेकिन ऐसा लगता है कि मुझे कुछ छोटा याद आ रहा है, धन्यवाद!पायथन

while (len(queue) > 0): 
    queue.sort(queue, lambda x: util.manhattanDistance(curr,x)) 
+0

एक साइड नोट के रूप में, पायथन में नियंत्रण विवरणों को (और नहीं होना चाहिए) कोष्ठक की आवश्यकता नहीं है: 'जबकि लेन (कतार)> 0: '। लेकिन, चूंकि 0 झूठा है और कोई अन्य पूर्णांक नहीं है, यह 'लेन (कतार) के समान है: '। और, चूंकि एक खाली अनुक्रम झूठा है और कोई अन्य अनुक्रम नहीं है, यह 'कतार के दौरान' जैसा है। और इस तरह आपको इसे लिखना चाहिए-यह अधिक मूर्खतापूर्ण, पढ़ने में आसान, छोटा, और संभवतः और भी अधिक कुशल है। – abarnert

+0

एक और समस्या मैंने अभी देखी है: आप 'queue.sort' के पहले तर्क के रूप में 'कतार' को पार कर रहे हैं। जो भी प्रकार 'कतार' है, यह सही नहीं है। (ओह, और एक चर 'कतार' को कॉल न करें; यह मानक लाइब्रेरी मॉड्यूल का नाम है।) – abarnert

+0

इसके अलावा: 'sort' ऑब्जेक्ट की लंबाई को बदलने वाला नहीं है, इसलिए यह हमेशा लूप के लिए जा रहा है, पहले से क्रमबद्ध सूची को फिर से क्रमबद्ध करना। – abarnert

उत्तर

5

ऐसा लगता है कि आप छँटाई के लिए कुंजी के रूप में अपने लैम्ब्डा समारोह का उपयोग करने के sort() विधि बताने के लिए कोशिश कर रहे हैं।

queue.sort(queue, key = [your lambda function])

फिर से लिखा लाइन है:

queue.sort(queue, key = lambda x: util.manhattanDistance(curr,x))

संपादित करें: यह कीवर्ड तर्कkey साथ किया जाता है मूल लैम्ब्डा समारोह के प्रयोजन के गलत समझा; सोचा कि यह तुलनात्मक कार्य के रूप में किया गया था, जो समझ में नहीं आता है क्योंकि दूरी कार्यों नकारात्मक नहीं हो सकते हैं

+1

+1। लेकिन शायद यह समझा जा सकता है कि, मूल रूप से लिखा गया है (2.x में), OP _is_ 'lambda' का उपयोग' cmp' फ़ंक्शन के रूप में करते हुए, और यही कारण है कि यह काम नहीं कर रहा है। (पायथन 3 में, कोड वास्तव में लिखित रूप में काम करेगा।) – abarnert

+1

आह, धन्यवाद। मुझे कीवर्ड तर्कों का क्रम नहीं पता था और इसे देखना नहीं चाहता था। मुझे लगता है कि यहां कुंजी लेना यह है कि कीवर्ड तर्कों को स्पष्ट रूप से निर्दिष्ट करना कहीं अधिक सुरक्षित है। –

+0

निश्चित रूप से सहमत हुए। सुरक्षित होने के अलावा, और 2.x और 3.x दोनों के साथ अपना कोड काम करना (और आईआईआरसी, '2to3' इस समस्या को ठीक नहीं करेगा), यह पढ़ने के लिए भी बहुत आसान है। _Nobody_ याद करता है कि ऑर्डर क्या है। किसी कीवर्ड के बिना कभी भी 'cmp' फ़ंक्शन का उपयोग करने का एकमात्र कारण यह है कि यदि आपको Python 2.3 या इससे पहले के साथ संगत होने की आवश्यकता है। – abarnert