>>> a=[1,2,3]
>>> a.remove(2)
>>> a
[1, 3]
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
>>> a= [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
>>>
তালিকা থেকে কোনও উপাদান অপসারণ করতে উপরের তিনটি পদ্ধতির মধ্যে কি কোনও পার্থক্য রয়েছে?
>>> a=[1,2,3]
>>> a.remove(2)
>>> a
[1, 3]
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
>>> a= [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
>>>
তালিকা থেকে কোনও উপাদান অপসারণ করতে উপরের তিনটি পদ্ধতির মধ্যে কি কোনও পার্থক্য রয়েছে?
উত্তর:
হ্যাঁ, প্রথম মিলের মানটিremove
সরিয়ে দেয় , নির্দিষ্ট সূচকটি নয়:
>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]
del
নির্দিষ্ট সূচীতে আইটেমটি সরিয়ে দেয়:
>>> a = [9, 8, 7, 6]
>>> del a[1]
>>> a
[9, 7, 6]
এবং pop
নির্দিষ্ট সূচীতে আইটেমটি সরিয়ে ফেরত দেয়।
>>> a = [4, 3, 5]
>>> a.pop(1)
3
>>> a
[4, 5]
তাদের ত্রুটি করার পদ্ধতিগুলিও পৃথক:
>>> a = [4, 5, 6]
>>> a.remove(7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> del a[7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> a.pop(7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
del
কোনও সিনট্যাক্স হোল্ডওভার নয়, না। সিনট্যাক্স শুধু মতো অপরিবর্তিত return
বা if
বা while
।
del
উদাহরণস্বরূপ কিছুটা বিভ্রান্তিকর করা হয়। ঠিক কোন উপাদানটি সরানো হয়েছে? ২ য় বা ৩ য়? আপনার ব্যবহার করা উচিত ছিল [9, 8, 7, 6]
, del a[1]
এবং[9, 7, 6]
ব্যবহার করুন del
সূচক দ্বারা একটি উপাদান মুছে ফেলার জন্য, pop()
সূচক দ্বারা এটি অপসারণ করতে আপনি ফিরে মান প্রয়োজন, এবং remove()
মান একটি উপাদান মুছে দিন। পরবর্তীটির জন্য তালিকার সন্ধান প্রয়োজন এবং তালিকায় ValueError
যদি এরকম কোনও মান না ঘটে তা উত্থাপন করে।
উপাদানগুলির i
একটি তালিকা থেকে সূচকটি মোছার সময় n
, এই পদ্ধতিগুলির গণ্য জটিলতা
del O(n - i)
pop O(n - i)
remove O(n)
del
সামান্য দ্রুত, তবে ভিন্ন কারণে: __delitem__
সিতে প্রয়োগ করা একটি প্রকারের জন্য নাম অনুসন্ধানের পরিবর্তে সূচকের দ্বারা ঘটে, যেখানে pop
পুরো বিবরণী প্রোটোকলটি অনুসরণ করা উচিত। ফাংশনগুলি সম্পাদন করার সময় তাদের একই পরিমাণ নেওয়া উচিত। উভয়ই একটি পয়েন্টার দেয় - একটি মুছে ফেলা অবজেক্টে, অন্যটিতে None
।
যেহেতু অন্য কারও এটি উল্লেখ করা হয়নি, নোট করুন যে del
(বিপরীতে pop
) তালিকাগুলির তালিকা বিছিন্ন করার কারণে বিভিন্ন সূচী অপসারণের অনুমতি দেয়:
>>> lst = [3, 2, 2, 1]
>>> del lst[1:]
>>> lst
[3]
IndexError
সূচক তালিকায় না থাকলে এটি এড়াতেও অনুমতি দেয় :
>>> lst = [3, 2, 2, 1]
>>> del lst[10:]
>>> lst
[3, 2, 2, 1]
ইতিমধ্যে অন্যদের দ্বারা বেশ ভাল উত্তর দেওয়া হয়েছে। এই আমার শেষ থেকে :)
স্পষ্টতই, pop
একমাত্র মানটি ফেরত দেয় এবং remove
কেবলমাত্র এটি del
মুছে ফেলার ক্ষেত্রে সীমাবদ্ধ রাখার পরে অবজেক্টটি সন্ধান করে।
অনেক সেরা ব্যাখ্যা এখানে কিন্তু আমি আরও সহজ করার জন্য যথাসাধ্য চেষ্টা করব।
এই সমস্ত পদ্ধতির মধ্যে, বিপরীত ও পপ পোস্টফিক্স রয়েছে যখন মুছুন উপসর্গ হয় ।
মুছে ফেলা (): এটি উপাদানটির প্রথম উপস্থিতি সরাতে ব্যবহৃত হয়েছিল
remove(i)
=> প্রথম মান আমার মান
>>> a = [0, 2, 3, 2, 1, 4, 6, 5, 7]
>>> a.remove(2) # where i = 2
>>> a
[0, 3, 2, 1, 4, 6, 5, 7]
পপ (): এটি উপাদান অপসারণ করতে ব্যবহৃত হয় যদি:
অসূচিত
pop()
=> তালিকার শেষে থেকে
>>>a.pop()
>>>a
[0, 3, 2, 1, 4, 6, 5]
নিদিষ্ট
pop(index)
=> সূচকের
>>>a.pop(2)
>>>a
[0, 3, 1, 4, 6, 5]
মুছুন () : এটি একটি উপসর্গ পদ্ধতি।
একই পদ্ধতির জন্য দুটি পৃথক সিনট্যাক্সের দিকে নজর রাখুন: [] এবং ()। এটিতে ক্ষমতা রয়েছে:
1. মুছে ফেলা তালিকা
del a[index]
=> ঠিক পপের মতো সূচি এবং এর সাথে সম্পর্কিত মান মুছতে ব্যবহৃত হয়।
>>>del a[1]
>>>a
[0, 1, 4, 6, 5]
2. পরিসীমা মান মুছুন [সূচী 1: সূচক এন]
del a[0:3]
=> পরিসরে একাধিক মান
>>>del a[0:3]
>>>a
[6, 5]
3. শেষ কিন্তু তালিকা নয়, এক শটে পুরো তালিকা মুছতে
del (a)
=> উপরে যেমন বলা হয়েছে।
>>>del (a)
>>>a
আশা করি এটি যদি বিভ্রান্তির কিছু থাকে তবে স্পষ্ট করে দেয়।
পপ - সূচক নেয় এবং মান দেয়
সরান - মান নেয়, প্রথম ঘটনাটি সরিয়ে দেয় এবং কিছুই দেয় না
মুছুন - সূচক নেয়, সেই সূচকের মান সরিয়ে দেয় এবং কিছুই দেয় না
বিভিন্ন ডেটা স্ট্রাকচারের যে কোনও অপারেশন / ফাংশন নির্দিষ্ট ক্রিয়াগুলির জন্য সংজ্ঞায়িত করা হয়। এখানে আপনার ক্ষেত্রে যেমন একটি উপাদান অপসারণ, মুছুন, পপ করুন এবং সরান। (আপনি যদি সেটগুলি বিবেচনা করেন, অন্য অপারেশন যুক্ত করুন - বাতিল করুন) যোগ করার সময় অন্য বিভ্রান্তিকর ঘটনাটি। সন্নিবেশ / লিখবেন। বিক্ষোভের জন্য, আসুন আমরা কার্যকর করি ডেক হ'ল একটি হাইব্রিড লিনিয়ার ডেটা স্ট্রাকচার, যেখানে আপনি উপাদানগুলি যুক্ত করতে পারেন / উভয় প্রান্ত থেকে উপাদানগুলি সরাতে পারেন ((পিছন এবং সামনে সমাপ্তি)
class Deque(object):
def __init__(self):
self.items=[]
def addFront(self,item):
return self.items.insert(0,item)
def addRear(self,item):
return self.items.append(item)
def deleteFront(self):
return self.items.pop(0)
def deleteRear(self):
return self.items.pop()
def returnAll(self):
return self.items[:]
এখানে, অপারেশনগুলি দেখুন:
def deleteFront(self):
return self.items.pop(0)
def deleteRear(self):
return self.items.pop()
অপারেশন কিছু ফেরত দিতে হবে। সুতরাং, পপ - একটি সূচক সহ এবং ছাড়াই। আমি যদি মানটি ফিরিয়ে দিতে না চাই: ডেল সেলফি.আইটিমস [0]
সূচক নয় মান অনুসারে মুছুন:
অপসারণ :
list_ez=[1,2,3,4,5,6,7,8]
for i in list_ez:
if i%2==0:
list_ez.remove(i)
print list_ez
আসুন সেটগুলির ক্ষেত্রে বিবেচনা করা যাক।
set_ez=set_ez=set(range(10))
set_ez.remove(11)
# Gives Key Value Error.
##KeyError: 11
set_ez.discard(11)
# Does Not return any errors.
উভয় পপ এবং মুছে ফেলার সময় উপরের মন্তব্যে বর্ণিত হিসাবে একটি উপাদান অপসারণ সূচক নিতে। একটি মূল পার্থক্য হ'ল তাদের জন্য সময় জটিলতা। কোনও সূচক ছাড়াই পপ () এর সময়ের জটিলতা হ'ল (1) তবে শেষ উপাদানটি মোছার ক্ষেত্রে একই ঘটনা নয়।
যদি আপনার ব্যবহারের ক্ষেত্রে সর্বদা সর্বশেষ উপাদানটি মুছতে হয় তবে মুছে ফেলা () এর চেয়ে বেশি পপ () ব্যবহার করা ভাল। সময়ের জটিলতার বিষয়ে আরও ব্যাখ্যার জন্য আপনি https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt দেখুন
delete
। পার্থক্যগুলি pop
হ'ল মানটি ফেরত দেয় এবং del
এটি টুকরোগুলিতে কাজ করে। যে ক্ষেত্রে pop
কাজ করে, del
ঠিক একই গণনা জটিলতা রয়েছে (এবং একটি ধ্রুবক শব্দ দ্বারা কিছুটা দ্রুত)।
অপসারণ তালিকায় অপারেশন সরানোর জন্য একটি মান দেওয়া হয়। এটি সেই মানটির সাথে একটি আইটেম সন্ধানের জন্য তালিকার সন্ধান করে এবং এটি খুঁজে পাওয়া প্রথম মিলে যাওয়া আইটেমটি মুছে দেয়। আপনার সাথে মেলে এমন আইটেমটি আছে, তাহলে একটি উত্থাপন এটা একটি ত্রুটি ValueError ।
>>> x = [1, 0, 0, 0, 3, 4, 5]
>>> x.remove(4)
>>> x
[1, 0, 0, 0, 3, 5]
>>> del x[7]
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
del x[7]
IndexError: list assignment index out of range
দেল বিবৃতি একটি সম্পূর্ণ তালিকা মুছে ফেলতে ব্যবহার করা যাবে। ডেল করার পক্ষে আপনার যুক্তি হিসাবে যদি কোনও নির্দিষ্ট তালিকা আইটেম থাকে (যেমন তালিকার 8 ম আইটেমটি উল্লেখ করার জন্য তালিকার নাম [7]), এটি কেবলমাত্র সেই আইটেমটি মুছে ফেলবে। এমনকি একটি তালিকা থেকে "স্লাইস" মুছে ফেলা সম্ভব। সীমার বাইরে সূচি বাইরে থাকলে কোনও ত্রুটি হয়, একটি সূচিপত্র উত্থাপন করে ।
>>> x = [1, 2, 3, 4]
>>> del x[3]
>>> x
[1, 2, 3]
>>> del x[4]
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
del x[4]
IndexError: list assignment index out of range
স্বাভাবিক ব্যবহারের পপ হিসাবে আপনি একটি স্ট্যাক হিসাবে তালিকা ব্যবহার করতে একটি তালিকা থেকে গত আইটেমটি মুছে ফেলতে হয়। ডেল থেকে পৃথক, পপটি মানটিকে তালিকা থেকে পপ করে দেয়। তালিকার শেষের চেয়ে আপনি পপ এবং পপকে অপশনালিকভাবে একটি সূচক মান দিতে পারেন (উদাহরণস্বরূপ listname.pop (0) তালিকা থেকে প্রথম আইটেমটি মুছে ফেলবে এবং ফলাফল হিসাবে সেই প্রথম আইটেমটি ফিরিয়ে দেবে)। আপনি তালিকাটি একটি সারির মতো আচরণ করার জন্য এটি ব্যবহার করতে পারেন তবে লাইব্রেরির রুটিনগুলি উপলব্ধ রয়েছে যা পপ (0) এর চেয়ে আরও ভাল পারফরম্যান্সের সাথে সারি ক্রিয়াকলাপ সরবরাহ করতে পারে। সীমার বাইরে সূচি না থাকলে এটি একটি ত্রুটি, একটি সূচিপত্র উত্থাপন করে ।
>>> x = [1, 2, 3]
>>> x.pop(2)
3
>>> x
[1, 2]
>>> x.pop(4)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
x.pop(4)
IndexError: pop index out of range
আরও বিশদের জন্য সংগ্রহগুলি দেখুন que
মুছে ফেলা মূলত মান নিয়ে কাজ করে। মুছুন এবং সূচীতে পপ কাজ
মুছে ফেলুন মূলত প্রথম ম্যাচের মানটি সরিয়ে দেয়। মুছে ফেলা একটি নির্দিষ্ট সূচক থেকে আইটেম মোছা পপ মূলত একটি সূচক গ্রহণ করে এবং সেই সূচীতে মানটি প্রদান করে। পরের বার আপনি তালিকাটি মুদ্রণ করলে মানটি উপস্থিত হয় না।
আপনি সূচক দ্বারাও কোনও মান সরাতে অপসারণ ব্যবহার করতে পারেন।
n = [1, 3, 5]
n.remove(n[1])
n এরপরে [1, 5] দেখুন
n = [5, 3, 5]
তাহলে চেষ্টা করুন n.remove(n[2])
।
n.remove(n[2])
অপসারণ n[0]
না n[2]
। সুতরাং এটি শুধু রৈখিক সময় কোন কারণে (কোন বড় চুক্তি হয়তো যখন এন = 3), এটি ভুল (একটি বড় চুক্তি কোন ব্যাপার এন কি)