>>> 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उदाहरण के लिए कुछ हद तक भ्रामक है। कौन सा तत्व हटा दिया जाता है, बिल्कुल? द 2 या ह 3? आप का उपयोग किया जाना चाहिए [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 (): इसका उपयोग तत्व की पहली घटना को हटाने के लिए किया जाता है
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
आशा है कि यह भ्रम को स्पष्ट करता है यदि कोई हो।
पॉप - इंडेक्स लेता है और वैल्यू देता है
निकालें - मान लेता है, पहली घटना को हटाता है, और कुछ भी नहीं देता है
हटाएं - सूचकांक लेता है, उस सूचकांक पर मूल्य निकालता है, और कुछ भी नहीं लौटाता है
अलग-अलग डेटा संरचनाओं पर किसी भी ऑपरेशन / फ़ंक्शन को विशेष कार्यों के लिए परिभाषित किया गया है। यहां आपके मामले में एक तत्व को हटाना यानी हटाना, पॉप करना और हटाना। (यदि आप सेट पर विचार करते हैं, तो एक और ऑपरेशन जोड़ें - त्यागें) जोड़ते समय अन्य भ्रामक मामला है। सम्मिलित करें / संलग्न। प्रदर्शन के लिए, हमें deque लागू करें। deque एक हाइब्रिड रैखिक डेटा संरचना है, जहाँ आप तत्वों को जोड़ सकते हैं / दोनों सिरों से तत्वों को निकाल सकते हैं। (रियर और फ्रंट एंड्स)
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
डेल बयान एक पूरी सूची को हटाने के लिए इस्तेमाल किया जा सकता। यदि आपके पास डेल के लिए अपने तर्क के रूप में एक विशिष्ट सूची आइटम है (जैसे सूचीनाम [7] विशेष रूप से सूची में 8 वें आइटम को संदर्भित करने के लिए), तो यह सिर्फ उस आइटम को हटा देगा। एक सूची से "स्लाइस" को हटाना भी संभव है। यह एक त्रुटि है अगर वहाँ सीमा से बाहर सूचकांक, एक IndexError उठाता है ।
>>> 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) की तुलना में बेहतर प्रदर्शन के साथ कतार संचालन प्रदान कर सकते हैं। यह एक त्रुटि है अगर वहाँ सीमा से बाहर सूचकांक, एक IndexError उठाता है ।
>>> 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
अधिक विवरण के लिए collection.deque देखें ।
मूल्य पर मूल रूप से काम करता है निकालें। हटाएं और पॉप कार्य इंडेक्स पर करें
निकालें मूल रूप से पहला मिलान मूल्य निकालता है। हटाएं किसी विशिष्ट इंडेक्स से आइटम को हटाता है पॉप मूल रूप से एक इंडेक्स लेता है और उस इंडेक्स पर मान लौटाता है। अगली बार जब आप सूची को प्रिंट करते हैं तो मान दिखाई नहीं देता है।
आप इंडेक्स द्वारा मान को हटाने के लिए रिमूव का भी उपयोग कर सकते हैं।
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) है, यह भी गलत है (एक बड़ी बात कोई फर्क नहीं पड़ता एन क्या है)