2011-03-18 6 views
8

मैं पायथन में एक नौसिखिया हूं, और यह मेरी पहली पोस्ट है, इसलिए बहुत कठोर मत बनो :)। मैं हाल ही में अजगर के साथ प्रयोग करना किया गया है और अगर कुछपाइथन में सूची की समझ मेमोरी कुशल तरीके से कम करती है?

तरह
max([x for x in range(25)]) 

अजगर पहले सभी तत्वों की सूची बनाने और फिर अधिकतम खोजने हे (2n) समय में जिसके परिणामस्वरूप में परिणाम होगा सोच रहा था, या यह अधिकतम के ट्रैक को बनाए रखेंगे क्योंकि यह Θ (एन) के लिए पुनरावृत्त था। इसके अलावा, चूंकि श्रेणी Python3 (एक पुनरावृत्त होने) में भिन्न है, तो क्या यह Python2 से अलग हो जाएगी?

उत्तर

14

आपका उदाहरण पायथन पहले पूरी सूची का निर्माण करेगा। आपको लगता है कि बचना चाहते हैं, तो आप एक जनरेटर अभिव्यक्ति के बजाय का उपयोग कर सकते हैं:

max((x for x in range(25))) 

या बस:

max(x for x in range(25)) 
बेशक (अजगर 2 में)

, range ही एक पूरी सूची बनाता है, तो क्या आप वास्तव में इस मामले में चाहते हैं:

max(x for x in xrange(25)) 

हालांकि, समय लिया, इन सभी भाव एक ही जटिलता है के बारे में। महत्वपूर्ण अंतर यह है कि आखिरी व्यक्ति को ओ (1) स्पेस की आवश्यकता होती है, जबकि अन्य को ओ (एन) स्पेस की आवश्यकता होती है।

2

सूची समझ हमेशा एक सूची उत्पन्न करती है (जब तक कि कोई अपवाद फेंकता न हो)। ज्यादातर मामलों में इसके बजाय जीनक्स का उपयोग करने की सिफारिश की जाती है।

max(x for x in xrange(25)) 
संबंधित मुद्दे