>>> 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__ประเภทที่เกิดขึ้นใน C เกิดขึ้นจากดัชนีมากกว่าตามชื่อในขณะที่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จำกัด ตัวเองเพื่อการลบง่าย
คำอธิบายที่ดีที่สุดมากมายอยู่ที่นี่ แต่ฉันจะพยายามทำให้ดีขึ้นเพื่อให้ง่ายขึ้น
ในบรรดาวิธีการเหล่านี้ทั้งหมดย้อนกลับและปรากฏเป็นpostfixขณะที่ลบเป็นคำนำหน้า
ลบ ():มันใช้เพื่อลบการเกิดขึ้นครั้งแรกขององค์ประกอบ
remove(i) => การเกิดขึ้นครั้งแรกของค่า 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 ():มันใช้เพื่อลบองค์ประกอบหาก:
ยังไม่ระบุ
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: ดัชนี N]
del a[0:3] => หลายค่าในช่วง
>>>del a[0:3]
>>>a
[6, 5]
3. สุดท้าย แต่ไม่ใช่รายการเพื่อลบรายการทั้งหมดในนัดเดียว
del (a) => ดังกล่าวข้างต้น
>>>del (a)
>>>a
หวังว่านี่จะทำให้เกิดความสับสนหากมี
ป๊อป - รับดัชนีและคืนค่า
ลบ - รับค่าลบสิ่งที่เกิดขึ้นครั้งแรกและส่งคืนอะไร
ลบ - ใช้ดัชนีลบค่าที่ดัชนีนั้นและไม่ส่งคืนอะไร
การดำเนินการ / ฟังก์ชั่นใด ๆ ในโครงสร้างข้อมูลที่แตกต่างกันมีการกำหนดไว้สำหรับการกระทำเฉพาะ ในกรณีของคุณเช่นลบองค์ประกอบ, ลบ, ป๊อปและลบ (หากคุณพิจารณาตั้งค่าให้เพิ่มการดำเนินการอื่น - ยกเลิก) กรณีที่สับสนอื่น ๆ อยู่ในขณะที่เพิ่ม แทรก / ผนวก สำหรับการสาธิตขอให้เรานำไปปฏิบัติ 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()
การดำเนินงานต้องส่งคืนบางสิ่ง ดังนั้นป๊อป - มีและไม่มีดัชนี หากฉันไม่ต้องการส่งคืนค่า: del self.items [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.
ขณะที่ป๊อปและลบทั้งคู่ใช้ดัชนีเพื่อลบองค์ประกอบตามที่ระบุไว้ในความคิดเห็นด้านบน ความแตกต่างที่สำคัญคือความซับซ้อนของเวลาสำหรับพวกเขา ความซับซ้อนของเวลาสำหรับป๊อป () ที่ไม่มีดัชนีคือ O (1) แต่ไม่ใช่กรณีเดียวกันสำหรับการลบองค์ประกอบสุดท้าย
หากกรณีการใช้งานของคุณลบองค์ประกอบสุดท้ายเสมอก็ควรใช้ pop () มากกว่า delete () สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับความซับซ้อนของเวลาคุณสามารถดู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เดลคำสั่งที่สามารถใช้ในการลบรายชื่อทั้งหมด หากคุณมีรายการเฉพาะเป็นอาร์กิวเมนต์ของคุณที่จะลบ (เช่น listname [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การใช้งานป๊อปตามปกติคือการลบรายการสุดท้ายออกจากรายการในขณะที่คุณใช้รายการเป็นสแต็ก ซึ่งแตกต่างจาก del, pop ส่งคืนค่าที่แตกออกจากรายการ คุณสามารถเลือกที่จะให้ค่าดัชนีเป็นแบบ pop และ pop จากส่วนอื่นนอกเหนือจากส่วนท้ายของรายการ (เช่น 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สำหรับรายละเอียดเพิ่มเติม
ลบโดยทั่วไปทำงานบนค่า ลบและ pop ทำงานกับดัชนี
ลบโดยทั่วไปจะลบค่าการจับคู่แรก ลบลบรายการออกจากดัชนีเฉพาะ Pop โดยทั่วไปจะใช้ดัชนีและส่งคืนค่าที่ดัชนีนั้น ครั้งต่อไปที่คุณพิมพ์รายการค่าจะไม่ปรากฏขึ้น
นอกจากนี้คุณยังสามารถใช้ remove เพื่อลบค่าตามดัชนีเช่นกัน
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]ดังนั้นมันไม่ใช่แค่เวลาเชิงเส้นโดยไม่มีเหตุผล (อาจไม่ใช่เรื่องใหญ่เมื่อ N = 3) มันก็ผิด (เรื่องใหญ่ไม่ว่า N คืออะไร)