কিভাবে একটি তালিকা খালি?


356

মনে হচ্ছে এটি "অপ্রয়োজনীয়" এইভাবে কোনও তালিকা খালি করছে:

while len(alist) > 0 : alist.pop()

এটি করার জন্য কি কোনও সুস্পষ্ট উপায় রয়েছে?


28
তাহলে কেন পাইথন ডিক্টস এবং সেটগুলির একটি স্পষ্ট () পদ্ধতি আছে তবে তালিকাগুলি নেই?
কাজ

13
তবে যদি বস্তুর একাধিক উল্লেখ থাকে তবে এটি কার্যকর হতে পারে।
নেড ডিলি

3
রান টাইমে প্রসেসের সময় যদি আমার একটি ভাগ করা তালিকা মুছে ফেলার প্রয়োজন হয় এবং গ্র্যাবেজিংয়ের জন্য অপেক্ষা করার প্রয়োজন না হয় (বা আমি কি ভুল? আমি আবর্জনা সংগ্রহকে ভুল বুঝেছি?)। এছাড়াও আমি যদি প্রতিটি পপড উপাদান চেক করতে চাই তবে আমি স্লাইসিং ব্যবহার করতে না পারার সময় এটি ডিবাগ করতে পারি (বা আমি কি ভুল)। আমার তালিকা সাফ করার সময় প্রক্রিয়া সম্পাদন বন্ধ করার দরকার নেই।
DrFalk3n

2
@ এস.লট এই কারণটি কেন গুরুত্বপূর্ণ তা আপনি বুঝতে পারছেন না এর অর্থ আমাদের বাকী বাকী নেই। যদি একাধিক অবজেক্টগুলি একটি সাধারণ তালিকার উপর নির্ভর করে তবে তা বিবেচিত হবে। বেশ কয়েকটি ডিজাইনের নিদর্শনগুলিতে এটি গুরুত্বপূর্ণ। আবর্জনা সংগ্রহকারী এর অর্থ আপনার নিজের পরে পরিষ্কার করতে হবে না; এটি আরও গণ্ডগোল করার লাইসেন্স নয়।
আপঅ্যান্ডএডাম

4
অন্য কোনও, উত্তরের উত্তর সত্ত্বেও, আপনার প্রাথমিক কোডটি লেখা যেতে পারে: অ্যালাস্টের সময়: alist.pop ()
মিঃ ওয়ান্ডারফুল

উত্তর:


570

এটি আসলে তালিকা থেকে সামগ্রীগুলি সরিয়ে দেয় তবে পুরানো লেবেলটিকে একটি নতুন খালি তালিকার সাথে প্রতিস্থাপন করে না:

del lst[:]

এখানে একটি উদাহরণ:

lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)

সম্পূর্ণতার জন্য, স্লাইস অ্যাসাইনমেন্টের একই প্রভাব রয়েছে:

lst[:] = []

একই সাথে কোনও অংশ প্রতিস্থাপনের সময় তালিকার একটি অংশ সঙ্কুচিত করতে এটি ব্যবহার করা যেতে পারে (তবে এটি প্রশ্নের ক্ষেত্রের বাইরে)।

নোট করুন যে lst = []তালিকাটি খালি করে না, কেবল একটি নতুন অবজেক্ট তৈরি করে এবং এটিকে ভেরিয়েবলের সাথে আবদ্ধ করে lst, তবে পুরাতন তালিকায় এখনও একই উপাদান থাকবে এবং এর অন্যান্য ভেরিয়েবল বাইন্ডিংগুলি থাকলে প্রভাব কার্যকর হবে।


3
আরও দুটি প্রশ্ন: "ডেল" হুবহু কী? (আমি এগুলি ডিট-এটস জিনিসগুলি অনুমিত করি তবে আসলে এটি কী তা আমি জানি না) এবং দ্বিতীয়: আপনি কীভাবে পড়বেন (জোরে জোরে) [:]
অস্কার রাইজ

2
: ডেল একটি শব্দ ব্যাখ্যার জন্য, আমি ডক্সে পাঠাতে চাই docs.python.org/reference/simple_stmts.html#the-del-statement
ফোরট্রান

14
আমি সাধারণত জোরে পাইথন কোড এক্সডি পড়ি না, তবে আমার যদি মনে হয় আমি "তালিকার শেষের দিকে শুরু থেকে টুকরো টুকরো" বলব।
ফরট্রান

2
@ জেলিবিয়ান সম্পূর্ণরূপে অনিচ্ছাকৃত ^ _ my ইংরেজি আমার মাতৃভাষা নয়, তাই আমি দুটি মন্তব্যের মধ্যে বিপরীততাটি সত্যিই লক্ষ্য করিনি।
ফোরটান

যদি আমরা l = [] করি তবে পুরাতন তালিকার সামগ্রীগুলি পাইথন জিসি দ্বারা সংগ্রহ করা আবর্জনা পাবে না?
অ্যালেক্স পুন্নেন

168

আপনি পাইথন 3.3 বা ভাল চালিয়ে থাকেন, আপনি ব্যবহার করতে পারেন clear()পদ্ধতি list, যা সমান্তরাল clear()এর dict, set, dequeএবং অন্যান্য চপল ধারক প্রকারসমূহ:

alist.clear()  # removes all items from alist (equivalent to del alist[:])

লিঙ্কযুক্ত ডকুমেন্টেশন পৃষ্ঠা অনুসারে, একই সাথে এটিও অর্জন করা যেতে পারে alist *= 0

সংক্ষেপে বলতে গেলে, জায়গাটিতে তালিকা পরিষ্কার করার জন্য এখানে চারটি সমতুল্য উপায় রয়েছে ( পাইথনের জেনের বিপরীতে !):

  1. alist.clear() # Python 3.3+
  2. del alist[:]
  3. alist[:] = []
  4. alist *= 0

6
এই উত্তরটি শীর্ষে থাকা উচিত, স্ট্যাকওভারফ্লোতে কী ভুল!
ব্রেকব্যাডএসপি

পরিষ্কার () ভাল।
sailfish009

61

আপনি চেষ্টা করতে পারেন:

alist[:] = []

যার অর্থ: তালিকায় স্প্লাইস করুন [](0 উপাদানগুলি) অবস্থানে [:](শুরু থেকে শেষ পর্যন্ত সমস্ত সূচক)

[[]] স্লাইস অপারেটর। আরও তথ্যের জন্য এই প্রশ্নটি দেখুন ।


4
শুধু কেন নয় alist = []?
মিটেনকা

16
@ মেনেনকা যে তালিকাটি খালি করে না, এটি ভেরিয়েবলটিকে alistএকটি ভিন্ন তালিকার সাথে ওভাররাইট করে যা খালি হয়ে যায়। যদি অন্য কারও কাছে মূল তালিকার কোনও উল্লেখ থাকে তবে তা যেমন রয়েছে তেমনই রয়েছে (যেমন এটিতে যা কিছু ছিল তা রয়েছে)
অ্যাডাম বটকিন

@ মিমেনকা আরেকটি কারণ হ'ল alist.clear()বা alist[:] = []এটি যাচাই করে সহায়তা করে যা alistসত্যই একটি তালিকা। বলুন আপনি alistকোনও ফাংশন থেকে ফিরে এসেছেন foo()। আপনি ভেবেছিলেন fooএকটি তালিকা ফিরে এসেছে তবে প্রকৃতপক্ষে এটি একটি ফিরে এসেছে None। ব্যবহার করা alist = []ভুলটি ধরতে পারে না।
আফফুলি

32

দেখা যাচ্ছে অজগর 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

1
পাইথন ২.7.২ এ, আমার মেশিনে, তারা প্রায় একই রকম। তারা উভয় লুপ প্রতি 13.5-13.7 ব্যবহারকার থেকে চালিত।
leetNightshade

"বি [:] = []" এবং "ডেল বি [:]" গণনা করার জন্য আপনাকে পাইথন 3 -মিমিটিট "এল = তালিকা (পরিসর (1000))" "বি = এল [:]" পরিমাপ করা উচিত। এটি করুন এবং হও ...
রকডবूट

1
অজগর 3.5 দিয়ে আমি বেঞ্চমার্ক করেছি এবং আমি লিটনাইটশেডের সাথে একমত। .clear(), del b[:]এবং b[:]=[]সব রানে একই ( b[:]=[]কিছুটা মন্থর হচ্ছে।
Conchylicultor

5
lst *= 0

হিসাবে একই প্রভাব আছে

lst[:] = []

এটি কিছুটা সহজ এবং মনে রাখা আরও সহজ। তা ছাড়া বলার মতো অনেক কিছুই নেই

দক্ষতা একই প্রায় বলে মনে হচ্ছে


1
সম্পূর্ণতার জন্য এটি উল্লেখ করার মতো, যে কোনও প্রদত্ত পূর্ণসংখ্যা যা এর চেয়ে কম বা সমান হয় 0তার একই প্রভাব থাকবে। যদিও এটি একটি সুন্দর ঝরঝরে কৌশল, আমি কিছুটা দু: খিত, যে এটি খুব বেশি মনোযোগ পেল না ..
পিটার ভারো

-1
list = []

listএকটি খালি তালিকায় পুনরায় সেট করা হবে ।

মনে রাখবেন যে আপনার সাধারণত সংরক্ষিত ফাংশন নামগুলি ছায়া করা উচিত নয়, যেমন listকোনও তালিকার কোনও অবজেক্টের জন্য নির্মাতা - আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন lstবা list_তার পরিবর্তে।


38
না: এটি তালিকাটি পরিবর্তন করবে না, এটি কেবল চলককে একটি খালি তালিকা নির্ধারণ করে list। আপনি যদি কোনও ফাংশন প্রত্যাশিত তালিকায় পাস (যেমন উদাহরণস্বরূপ) পরিবর্তন করতে চান তবে এটি আপনার যা করতে চান তা করবে না।
অ্যাডাম বাটকিন

10
আসলে তা না. প্রশ্নটি "কীভাবে একটি তালিকা খালি করবেন" নয় "কীভাবে একটি তালিকাতে থাকা একটি ভেরিয়েবলের উপরে অর্পণ করা যায়"
অ্যাডাম বাটকিন

6
প্রশ্ন দ্ব্যর্থক ছিল না, অপ এর স্নিপেট উপাদানের (যে, এটা স্থানে রুপান্তরিত করছে) তালিকার পপিং আউট হয় ...
ফোরট্রান

7
এছাড়াও, "তালিকা" একটি পরিবর্তনশীল নাম হিসাবে ব্যবহার করা উচিত নয়, কারণ "তালিকা" প্রকারের ছায়া। অনেক পাইথন বিকাশকারী তালিকা পরিবর্তনশীল নাম হিসাবে "এল" ব্যবহার করেন তবে আমি "lst" পছন্দ করি।
স্টিভাহ

1
কখনও কখনও আপনি কেবল তালিকাটি খালি করতে চান এবং এটি প্রস্তাবিত যে কোনও পদ্ধতির মতোই ভাল। সম্ভবত আরও দ্রুত
smac89

-3

আপনি ব্যবহার করতে পারেন এমন আরও একটি সহজ কোড (আপনার অবস্থার উপর নির্ভর করে):

index=len(list)-1

while index>=0:
    del list[index]
    index-=1

আপনাকে তালিকাটির দৈর্ঘ্যে সূচকটি শুরু করতে হবে এবং 0 এর তুলনায় পিছনে দিকে সূচকটি পিছনে যেতে হবে, কারণ এটি আপনাকে কেবলমাত্র অর্ধেক কেটে দেওয়া তালিকার দৈর্ঘ্যের সমান সূচক দিয়ে শেষ করবে।

এছাড়াও, নিশ্চিত হোন যে সময় রেখার একটি "এর চেয়ে বড় বা সমান" চিহ্ন রয়েছে। এটি ছাড়াই আপনাকে বাকী [0] তালিকা রেখে যাবে।


15
একটি ঘনক্ষেত্র দিয়ে চাকা পুনর্বিবেচনা
CONvid19

হা হা। এটি দ্বিতীয় অদ্ভুত উত্তর (+ একটি উপযুক্ত মন্তব্য) যা আমি এসও-তে এসেছি। এই স্মরণীয় জিনিসগুলির জন্য একটি সাইট থাকা উচিত: ডি
আকিনুরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.