पायथन में एक नई खाली सूची बनाने का सबसे अच्छा तरीका क्या है?
l = []
या
l = list()
मैं यह दो कारणों से पूछ रहा हूं:
- तकनीकी कारण, जो तेज है। (ओवरहेड का कारण बनता है?)
- कोड पठनीयता - कौन सा एक मानक सम्मेलन है।
पायथन में एक नई खाली सूची बनाने का सबसे अच्छा तरीका क्या है?
l = []
या
l = list()
मैं यह दो कारणों से पूछ रहा हूं:
जवाबों:
यहां बताया गया है कि आप यह जांच सकते हैं कि कौन सा कोड अधिक तेज़ है:
% python -mtimeit "l=[]"
10000000 loops, best of 3: 0.0711 usec per loop
% python -mtimeit "l=list()"
1000000 loops, best of 3: 0.297 usec per loop
हालाँकि, व्यवहार में, यह आरंभीकरण आपके कार्यक्रम का सबसे छोटा हिस्सा है, इसलिए इस बारे में चिंता करना शायद गलत है।
पठनीयता बहुत व्यक्तिपरक है। मैं पसंद करता हूं []
, लेकिन एलेक्स मार्टेली जैसे कुछ बहुत ही जानकार लोग पसंद करते हैं list()
क्योंकि यह प्रशंसनीय है ।
list('')
देने के []
बजाय ['']
?
list('abcd')
और आप सब कुछ समझते हैं)
list()
स्वाभाविक रूप से धीमा है []
, क्योंकि
अगर आप सिर्फ कुछ और होने के लिए सूची को फिर से परिभाषित नहीं करते हैं, तो प्रतीक लुकअप (पहले से जानने के लिए अजगर के लिए कोई रास्ता नहीं है!), और
वहाँ समारोह आह्वान है,
फिर यह जांचना होगा कि क्या पारित करने योग्य तर्क था (इसलिए यह उसमें से तत्वों के साथ सूची बना सकता है) पीएस। हमारे मामले में कोई नहीं है, लेकिन "अगर" चेक है
ज्यादातर मामलों में गति अंतर हालांकि कोई व्यावहारिक अंतर नहीं करेगा।
list()
धीमी है []
!
list()
केवल यह जाँचने के लिए कि क्या कोई भी तर्क था या नहीं ... "जाँच करें कि क्या यह चलने योग्य है" और "तत्वों के साथ सूची बनाएँ" बस नहीं होता है; वे केवल तभी लागू होते हैं जब कोई arg होता है। यह भी संभव है कि C कोड []
को उसी C कोड के रूप में कहा जाए list()
। किसी भी मामले में (सी) के साथ शामिल समय (ए) + (बी) की तुलना में छोटा होगा।
मैं उपयोग करता हूं []
।
मैं वास्तव में इसके बारे में नहीं जानता, लेकिन यह मुझे लगता है, अनुभव से, कि jpcgt वास्तव में सही है। निम्नलिखित उदाहरण: यदि मैं निम्नलिखित कोड का उपयोग करता हूं
t = [] # implicit instantiation
t = t.append(1)
दुभाषिया में, फिर कॉलिंग टी मुझे बिना किसी सूची के सिर्फ "टी" देता है, और अगर मैं कुछ और जोड़ता हूं, जैसे
t = t.append(2)
मुझे त्रुटि मिलती है "'कोई नहीं' ऑब्जेक्ट में कोई विशेषता नहीं है 'परिशिष्ट'"। यदि, हालांकि, मैं सूची बनाता हूं
t = list() # explicit instantiation
तब यह ठीक काम करता है।
t.append(1)
संशोधित t
जगह में, यह कुछ भी वापस नहीं करता है, लेकिन None
और आप इस बताए जाते हैं None
करने के लिए t
। इसलिए सूची के बजाय t
अब संदर्भित करता है None
। यहां आपकी गलती t=t.append(1)
सिर्फ लिखने के बजाय थी t.append(1)
। आप के साथ समान व्यवहार देखेंगे list()
, इसलिए यहाँ कोई अंतर नहीं है।
सिर्फ @Darkonaut जवाब को उजागर करने के लिए क्योंकि मुझे लगता है कि यह अधिक दृश्यमान होना चाहिए।
new_list = []
या new_list = list()
दोनों ठीक हैं (प्रदर्शन को अनदेखा कर रहे हैं), लेकिन append()
रिटर्न None
, परिणामस्वरूप आप नहीं कर सकते new_list = new_list.append(something
।
मैं इस तरह के रिटर्न के फैसले से बहुत हैरान हूं। छी।