মনে হচ্ছে এটি "অপ্রয়োজনীয়" এইভাবে কোনও তালিকা খালি করছে:
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 ইউজেকের 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] তালিকা রেখে যাবে।