ऐसा लगता है कि "गंदा" इस तरह से एक सूची को खाली कर रहा है:
while len(alist) > 0 : alist.pop()
क्या ऐसा करने के लिए एक स्पष्ट तरीका मौजूद है?
ऐसा लगता है कि "गंदा" इस तरह से एक सूची को खाली कर रहा है:
while len(alist) > 0 : alist.pop()
क्या ऐसा करने के लिए एक स्पष्ट तरीका मौजूद है?
जवाबों:
यह वास्तव में सूची से सामग्री को हटा देता है, लेकिन पुराने लेबल को नई खाली सूची से प्रतिस्थापित नहीं करता है:
del lst[:]
यहाँ एक उदाहरण है:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
पूर्णता के लिए, स्लाइस असाइनमेंट का एक ही प्रभाव है:
lst[:] = []
यह एक ही समय में एक भाग को प्रतिस्थापित करते समय सूची के एक हिस्से को छोटा करने के लिए भी इस्तेमाल किया जा सकता है (लेकिन यह प्रश्न के दायरे से बाहर है)।
ध्यान दें कि करना lst = []
सूची को खाली नहीं करता है, बस एक नई वस्तु बनाता है और इसे चर में बांधता है lst
, लेकिन पुरानी सूची में अभी भी समान तत्व होंगे, और प्रभाव स्पष्ट होगा यदि इसमें अन्य चर बाइंडिंग थे।
आप अजगर 3.3 या बेहतर चला रहे हैं, तो आप उपयोग कर सकते हैं clear()
की विधि list
है, जो के समानांतर है clear()
की dict
, set
, deque
और अन्य परिवर्तनशील कंटेनर प्रकार:
alist.clear() # removes all items from alist (equivalent to del alist[:])
लिंक किए गए प्रलेखन पृष्ठ के अनुसार, इसके साथ भी हासिल किया जा सकता है alist *= 0
।
योग करने के लिए, एक सूची को साफ़ करने के लिए चार बराबर तरीके हैं ( पायथन के ज़ेन के विपरीत )!)
alist.clear() # Python 3.3+
del alist[:]
alist[:] = []
alist *= 0
तुम कोशिश कर सकते हो:
alist[:] = []
जिसका अर्थ है: []
स्थान पर सूची (0 तत्व) में विभाजन[:]
विभाजन (प्रारंभ से अंत तक सभी अनुक्रमित)
alist = []
?
alist
को एक अलग सूची के साथ अधिलेखित करता है जो खाली होता है। यदि किसी और के पास मूल सूची का संदर्भ था, तो वह इस प्रकार है (यानी इसमें वह है जो उसमें शुरू करने के लिए था)
alist.clear()
या alist[:] = []
यह जाँचने में मदद करता है कि alist
वास्तव में एक सूची है। कहो कि तुम alist
एक समारोह से लौट आए foo()
। आपने सोचा था कि foo
एक सूची वापस आ गई है लेकिन वास्तव में यह वापस आ गई है None
। का उपयोग alist = []
कर उस गलती को पकड़ नहीं सकता।
यह पता चला है कि अजगर 2.5.2 के साथ, 1.1 usec del l[:]
की तुलना में थोड़ा धीमा है l[:] = []
।
$ python -mtimeit "l=list(range(1000))" "b=l[:];del b[:]"
10000 loops, best of 3: 29.8 usec per loop
$ python -mtimeit "l=list(range(1000))" "b=l[:];b[:] = []"
10000 loops, best of 3: 28.7 usec per loop
$ python -V
Python 2.5.2
.clear()
, del b[:]
और b[:]=[]
सभी एक समान होते हैं ( b[:]=[]
थोड़ा धीमे होने के कारण।
lst *= 0
के रूप में एक ही प्रभाव है
lst[:] = []
यह थोड़ा सरल है और शायद याद रखना आसान है। इसके अलावा वहाँ कहने के लिए बहुत कुछ नहीं है
दक्षता उसी के बारे में लगती है
0
है, का समान प्रभाव होगा। यह एक बहुत साफ-सुथरी चाल है, हालांकि मैं थोड़ा दुखी हूं, कि इस पर ज्यादा ध्यान नहीं गया ..
list = []
list
एक खाली सूची में रीसेट हो जाएगा ।
ध्यान दें कि आपको आम तौर पर आरक्षित नाम को छाया नहीं देना चाहिए, जैसे कि list
, जो किसी सूची ऑब्जेक्ट के लिए निर्माता है - आप उदाहरण के लिए lst
या list_
इसके बजाय उपयोग कर सकते हैं ।
list
। यदि आपको किसी फ़ंक्शन को सूची में (उदाहरण के लिए) संशोधित करने की उम्मीद है, तो यह वह नहीं करेगा जो आप चाहते हैं।
एक और सरल कोड जिसका आप उपयोग कर सकते हैं (आपकी स्थिति के आधार पर) यह है:
index=len(list)-1
while index>=0:
del list[index]
index-=1
आपको सूची की लंबाई पर इंडेक्स शुरू करना होगा और 0 से आगे की ओर बनाम इंडेक्स पर जाना होगा, क्योंकि इससे आप सूची की लंबाई के बराबर इंडेक्स के साथ समाप्त हो जाएंगे, जबकि यह केवल आधे में कट जाएगा।
इसके अलावा, सुनिश्चित करें कि जबकि लाइन में "साइन से अधिक या बराबर" है। इसे छोड़ना आपको सूची [0] के साथ छोड़ देगा।