তালিকা সাফ করার বিভিন্ন উপায়


207

আপনি পাইথনের কোনও তালিকা সাফ করতে চাইলে এই দুটি লাইনের একটির চেয়ে আরও জটিল কিছু করার কোনও কারণ আছে কি?

old_list = []
old_list = list()

আমার জিজ্ঞাসার কারণটি হ'ল আমি এটি কিছু চলমান কোডে দেখেছি:

del old_list[ 0:len(old_list) ]

1
তুমি কেন এটা করছ? আবর্জনা সংগ্রহের কাজ। পুরানো তালিকার মানটিকে উপেক্ষা করে পাইথনটিকে স্বয়ংক্রিয়ভাবে পরিষ্কার করতে দেওয়া হয় না কেন?
এস .লট

40
@ এস.লোট: পোস্টারটি কোডটি লিখেনি, এবং জিজ্ঞাসা করছে যে মূল লেখক কেন এটি করতে পেরেছেন।
জন ফুহি

1
আপনি এছাড়াও করতে পারেন: যখন l: l.pop ()
রোডিআরইচ

12
হাঃ হাঃ হাঃ. আমি নিশ্চিত যে দক্ষ
ফোগলবার্ড

18
আপনার প্রশ্নের সাথে সম্পর্কিত নয়, তবে কোনও স্লাইস নির্দিষ্ট করার সময় আপনার লেন ব্যবহার করা উচিত নয়। a[:x]এর অর্থ a[x:]x থেকে শুরু করে x এর সমাপ্তি। a[ 0:len(a) ]হিসাবে লেখা যেতে পারে a[:]। আপনি শেষ থেকে গণনা করতে নেতিবাচক ব্যবহার করতে পারেন ( a[-1]এটি সর্বশেষ উপাদান)।
ইডব্রি

উত্তর:


356

জায়গায় একটি তালিকা সাফ করা একই তালিকার অন্যান্য সমস্ত উল্লেখকে প্রভাবিত করবে।

উদাহরণস্বরূপ, এই পদ্ধতিটি অন্যান্য রেফারেন্সগুলিকে প্রভাবিত করে না:

>>> a = [1, 2, 3]
>>> b = a
>>> a = []
>>> print(a)
[]
>>> print(b)
[1, 2, 3]

তবে এটি একটি করে:

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]      # equivalent to   del a[0:len(a)]
>>> print(a)
[]
>>> print(b)
[]
>>> a is b
True

আপনি এছাড়াও করতে পারেন:

>>> a[:] = []

86
আপনিও করতে পারেনdel a[:]
ইডব্রি

1
প্রথমটি কেন কেবল প্রভাব ফেলবে a? আমি ভেবেছিলাম aএবং bএকই বস্তুর রেফারেন্স ... কেবল কেন তা জানতে চাই। ধন্যবাদ।
অ্যালস্টন

37
সঙ্গে পাইথন 3.3 এবং পরে আপনার সাথে যেতে পারেন a.clear(), কোন সমস্যা!
মারেক লেয়ান্ডোভস্কি

4
@ স্টলম্যান কারণ প্রথমে আপনি 'এ'র জন্য নতুন অ্যারেতে নির্দেশ করার জন্য একটি রেফারেন্স পরিবর্তন করছেন, একটিটি সাফ করছেন না, এবং খ এখনও একটি
পুরানোটিকে নির্দেশ করছেন

4
কেউ যদি এই পদ্ধতির মধ্যে পারফরম্যান্সের পার্থক্য দেখাতে পারে তবে দুর্দান্ত লাগবে!
সুয়ানমিগুও

37

করা alist = []তালিকাটি সাফ করে না, কেবল একটি খালি তালিকা তৈরি করে এবং এটিকে ভেরিয়েবলের সাথে আবদ্ধ করে alist। পুরাতন তালিকাটি এখনও বিদ্যমান থাকবে যদি এটিতে অন্যান্য পরিবর্তনশীল বাইন্ডিং থাকে।

আসলে একটি তালিকা সাফ করতে ইন-জায়গা , আপনি এই উপায়ে কোনো ব্যবহার করতে পারেন:

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

দেখুন চপল সিকোয়েন্স প্রকারভেদ আরো বিস্তারিত জানার জন্য ডকুমেন্টেশন পাতা।


2
আমি পরীক্ষা করেছি এবং তালিকাবদ্ধ করেছি * = 0 দ্রুততম, পরের দ্রুততম অ্যালিস্ট.ক্লায়ার () এবং অন্যান্য দুটি পদ্ধতি সমান দ্রুত। আপনি কী ব্যাখ্যা করতে পারেন যে * = 0 দ্রুততম কেন হয়?
জেনি

3
@Jenny: এটা শুধু তার চেয়ে কম (অথবা কম দামী) ব্যবহার করে opcodes ফণা অধীন। উদাহরণস্বরূপ, অপারেটর সংস্করণে কোনও পদ্ধতির নাম সন্ধান বা স্লাইসগুলি তৈরি করার দরকার নেই।
ইউজিন ইয়ারমাস

"এটির জন্য একটি - এবং সর্বোপরি একমাত্র - প্রকাশ্য উপায় থাকতে হবে" " পাইথন এখানে জ্বলজ্বল করছে :)
নিক ও'লাই

36

অজগর তালিকাটি সাফ করার একটি খুব সহজ উপায় রয়েছে। ডেল তালিকা_নাম [:] ব্যবহার করুন ।

উদাহরণ স্বরূপ:

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]
>>> print a, b
[] []

13

এটি আমার কাছে উপস্থিত হয় যে ডেল আপনাকে স্মৃতি ফিরিয়ে দেবে, যখন একটি নতুন তালিকা বরাদ্দ করা পুরানোটিকে কেবল মুছে ফেলা হবে কেবল যখন জিসি রান.মেটার mat

এটি বৃহত তালিকার জন্য কার্যকর হতে পারে তবে ছোট তালিকার জন্য এটি নগণ্য হওয়া উচিত।

সম্পাদনা : আলগোরিয়াস হিসাবে, এটি কোনও ব্যাপার নয়।

মনে রাখবেন যে

del old_list[ 0:len(old_list) ]

সমতুল্য

del old_list[:]

2
জিসি চক্রের মধ্যে চালানো হয় না। শেষ রেফারেন্সটি বাদ দেওয়ার সাথে সাথে তালিকাটি মুক্ত করা হবে।
অ্যালগরিয়াস

2
অ্যালগরিয়াস: এটি সিপিথনের পক্ষে সত্য, তবে অন্যান্য বাস্তবায়নের ক্ষেত্রে এটি নাও হতে পারে।
মহিষ্মিত

2
ডেল ওল্ড_লিস্ট [0: লেন (ওল্ডলিস্ট)] এবং ডেল ওল্ডলিস্ট [:] এর একই ফলাফল রয়েছে তবে পরবর্তীটি দ্রুততর হয়েছে (পাইথন ২.6 এ চেক করা হয়েছে)
রায় নিটিরাউ

6
del list[:] 

সেই তালিকার ভেরিয়েবলের মানগুলি মুছবে

del list

পরিবর্তনশীল নিজেই মেমরি থেকে মুছে ফেলবে


5

দুটি মামলা রয়েছে যার মধ্যে আপনি একটি তালিকা সাফ করতে চাইতে পারেন:

  1. আপনি নিজের old_listকোডটিতে নামটি আরও ব্যবহার করতে চান ;
  2. আপনি চান কিছুটা স্মৃতি মুক্ত করতে পুরানো তালিকাটি যত তাড়াতাড়ি সম্ভব জঞ্জাল সংগ্রহ করা উচিত;

ক্ষেত্রে 1 আপনি কেবল এই দায়িত্বটি নিয়ে যান:

    old_list = []    # or whatever you want it to be equal to

ক্ষেত্রে 2 delবিবৃতি তালিকা old listপয়েন্ট তালিকার রেফারেন্স গণনা হ্রাস করতে হবে । তালিকার অবজেক্টটি কেবলমাত্র নামের দ্বারা নির্দেশিত old_listহলে রেফারেন্স গণনা 0 হবে এবং আবর্জনা সংগ্রহের জন্য অবজেক্টটি মুক্ত করা হবে।

    del old_list

3

আপনি যদি তালিকাটি সাফ করে দিচ্ছেন তবে আপনার অবশ্যই স্পষ্টতই আর তালিকার দরকার নেই। যদি তা হয় তবে আপনি কেবল সহজ ডেল পদ্ধতিতে পুরো তালিকাটি মুছতে পারেন।

a = [1, 3, 5, 6]
del a # This will entirely delete a(the list).

তবে যদি আপনার এটি আবার প্রয়োজন হয় তবে আপনি এটি পুনরায় পুনর্নির্মাণ করতে পারেন। অথবা কেবল এর উপাদানগুলি সাফ করে দিয়ে

del a[:]

-4

সূক্ষ্ম কাজ করে এমন আরেকটি সমাধান হ'ল রেফারেন্স খালি তালিকা হিসাবে খালি তালিকা তৈরি করা।

empt_list = []

উদাহরণস্বরূপ আপনার হিসাবে একটি তালিকা আছে a_list = [1,2,3]। এটি পরিষ্কার করার জন্য কেবল নিম্নলিখিতটি তৈরি করুন:

a_list = list(empt_list)

এটি a_listঠিক খালি তালিকা তৈরি করবে empt_list


খালি তালিকা তৈরি করার কোনও কারণ নেই। শুধু a_list = list () ব্যবহার করুন।
ড্যানিয়েল হার্ডিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.