2010-09-08 10 views
7

मेरे पास पाइथन सूची में पूर्णांक की एक अनसुलझा सूची है। मैं तत्वों को पूर्ण सूची के सबसेट में सॉर्ट करना चाहता हूं, न कि पूरी सूची में। मैं सूची को क्रमबद्ध करना चाहता हूं ताकि नई सूचियां न बनें (मैं इसे बहुत बार कर रहा हूं)। मैं शुरू मेंपूर्णांक की एक पायथन सूची के भीतर एक उपन्यास को छंटाई

p[i:j].sort() 

की कोशिश की लेकिन यह पी की सामग्री को शायद क्योंकि एक नई सूची बनाई गई थी, हल कर, और फिर मूल सूची की सामग्री को प्रभावित किए बिना फेंक दिया नहीं बदला। मैं, निश्चित रूप से, अपने स्वयं के सॉर्ट फ़ंक्शन का निर्माण कर सकता हूं और उचित तत्वों का चयन करने के लिए लूप का उपयोग कर सकता हूं लेकिन यह पाइथोनिक महसूस नहीं करता है। क्या सुब्लीवादियों को जगह में हल करने का कोई बेहतर तरीका है?

उत्तर

15

आप p[i:j] = sorted(p[i:j])

+0

+1: एक सरल समाधान के साथ सेकंड्स द्वारा मुझे मारो। –

+1

अभी भी ऑपरेटर की इच्छा नहीं है, लेकिन मैं सुझाव देने जा रहा था। इसे अभी भी एक अलग उप-सरणी बनाना है और उसे 'p [i: j]' को निर्दिष्ट करने से पहले इसे सॉर्ट करना है। मैंने कुछ समय के लिए सोचा है कि सॉर्ट करने के लिए रेंज निर्दिष्ट करने के लिए सॉर्ट() में एक विकल्प होना चाहिए। इससे अनावश्यक स्मृति उपयोग खत्म हो जाएगा। –

+1

यह निश्चित रूप से "कैसे" को संबोधित करता है लेकिन क्या यह कम से कम 2 नई सूचियां नहीं बनाएगा? पी [i: j] के लिए एक क्रमबद्ध और परिणाम के लिए दूसरा क्रमबद्ध से। – sizzzzlerz

0

"स्थान पर" लिख सकते हैं ज्यादा मतलब नहीं है। आप यह चाहते हैं।

p[i:j] = list(sorted(p[i:j])) 
-1

ऐसा इसलिए है क्योंकि पी [i: j] एक नई सूची देता है। मैं इस तत्काल समाधान के बारे में सोच सकता हूं:

l = p[i:j] 
l.sort() 
a = 0 
for x in range(i, j): 
    p[x] = l[a] 
    a += 1 
+0

आप बस 'पी [i: j] = l' लिख सकते हैं – kennytm

संबंधित मुद्दे