การลบองค์ประกอบออกจากรายการ (อาร์เรย์) ใน Python: clear(), pop(), remove(), del

ธุรกิจ

หากต้องการลบองค์ประกอบออกจากรายการ (อาร์เรย์) ของรายการประเภทใน Python ให้ใช้วิธีการรายการ clear(), pop() และ remove() คุณยังสามารถระบุตำแหน่งและช่วงของรายการโดยใช้ดัชนีหรือสไลซ์ แล้วลบออกโดยใช้คำสั่ง del

ข้อมูลต่อไปนี้มีให้ที่นี่

  • ลบองค์ประกอบทั้งหมด:clear()
  • ลบองค์ประกอบในตำแหน่งที่ระบุและรับค่าของมัน:pop()
  • ค้นหาองค์ประกอบที่มีค่าที่ระบุและลบองค์ประกอบแรก:remove()
  • การลบโดยระบุตำแหน่งและช่วงในส่วนดัชนี:del
  • แบทช์ลบองค์ประกอบหลายรายการที่ตรงตามเกณฑ์:รายการบ่งชี้การรวม

โปรดทราบว่ารายการสามารถจัดเก็บข้อมูลประเภทต่างๆ และแตกต่างจากอาร์เรย์โดยสิ้นเชิง ใช้อาร์เรย์ (ไลบรารีมาตรฐาน) หรือ NumPy เมื่อคุณต้องการจัดการอาร์เรย์สำหรับกระบวนการที่ต้องการขนาดหน่วยความจำหรือที่อยู่หน่วยความจำ หรือสำหรับการคำนวณตัวเลขของข้อมูลขนาดใหญ่

ลบองค์ประกอบทั้งหมด:clear()

ในวิธีการรายการ clear() องค์ประกอบทั้งหมดจะถูกลบออก ส่งผลให้รายการว่างเปล่า

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

l.clear()
print(l)
# []

ลบองค์ประกอบในตำแหน่งที่ระบุและรับค่าของมัน:pop()

วิธี pop() ของรายการสามารถใช้เพื่อลบองค์ประกอบในตำแหน่งที่ระบุและรับค่าขององค์ประกอบนั้น

หมายเลขแรก (เริ่มต้น) คือ 0

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(0))
# 0

print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(3))
# 4

print(l)
# [1, 2, 3, 5, 6, 7, 8, 9]

ค่าลบยังสามารถใช้เพื่อระบุตำแหน่งจากจุดสิ้นสุด (สุดท้าย) จุดสิ้นสุด (สุดท้าย) คือ -1

print(l.pop(-2))
# 8

print(l)
# [1, 2, 3, 5, 6, 7, 9]

หากละเว้นอาร์กิวเมนต์และไม่ได้ระบุตำแหน่งไว้ องค์ประกอบที่ส่วนท้าย (สุดท้าย) จะถูกลบออก

print(l.pop())
# 9

print(l)
# [1, 2, 3, 5, 6, 7]

การระบุตำแหน่งที่ไม่มีอยู่จะส่งผลให้เกิดข้อผิดพลาด

# print(l.pop(100))
# IndexError: pop index out of range

โปรดทราบว่า pop(0) ซึ่งลบองค์ประกอบแรก ต้องการค่าใช้จ่ายต่อไปนี้ และไม่ใช่การดำเนินการที่มีประสิทธิภาพ ดูหน้าต่อไปนี้บนวิกิอย่างเป็นทางการสำหรับความซับซ้อนในการคำนวณของการดำเนินการต่างๆ ในรายการ
O(n)

O(1)ประเภท deque มีอยู่ในโมดูลคอลเลกชันไลบรารีมาตรฐานเป็นประเภทที่จะลบองค์ประกอบไปด้านบนด้วยค่าใช้จ่ายนี้ ตัวอย่างเช่น หากคุณต้องการจัดการข้อมูลแบบคิว (FIFO) การใช้ deque จะมีประสิทธิภาพมากกว่า

ค้นหาองค์ประกอบที่มีค่าที่ระบุและลบองค์ประกอบแรก:remove()

list method remove() สามารถใช้เพื่อค้นหาองค์ประกอบที่มีค่าเดียวกับที่ระบุและลบองค์ประกอบแรก

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

หากรายการมีองค์ประกอบมากกว่าหนึ่งรายการที่ตรงกับค่าที่ระบุ ระบบจะลบเฉพาะองค์ประกอบแรกเท่านั้น

l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']

หากระบุค่าที่ไม่มีอยู่ จะเกิดข้อผิดพลาดขึ้น

# l.remove('xxx')
# ValueError: list.remove(x): x not in list

การลบโดยระบุตำแหน่งและช่วงในส่วนดัชนี:del

คุณยังสามารถใช้คำสั่ง del เพื่อลบองค์ประกอบออกจากรายการ

ระบุองค์ประกอบที่จะลบโดยดัชนี ดัชนีแรก (เริ่มต้น) คือ 0 และดัชนีสุดท้าย (สุดท้าย) คือ -1

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[0]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]

del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]

หากคุณระบุช่วงด้วยการแบ่งส่วน คุณสามารถลบองค์ประกอบหลายรายการพร้อมกันได้

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]

l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]

l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]

l = list(range(10))
del l[-3:]
print(l)
# [0, 1, 2, 3, 4, 5, 6]

นอกจากนี้ยังสามารถระบุช่วงทั้งหมดและลบองค์ประกอบทั้งหมดได้

l = list(range(10))
del l[:]
print(l)
# []

[start:stop:step]หากคุณระบุช่วงในสไลซ์ด้วยวิธีนี้และระบุขั้นตอนที่เพิ่มขึ้น คุณสามารถลบองค์ประกอบการกระโดดหลายรายการพร้อมกันได้

l = list(range(10))
del l[2:8:2]
print(l)
# [0, 1, 3, 5, 7, 8, 9]

l = list(range(10))
del l[::3]
print(l)
# [1, 2, 4, 5, 7, 8]

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการหั่น ให้ดูบทความต่อไปนี้

แบทช์ลบองค์ประกอบหลายรายการที่ตรงตามเกณฑ์:รายการบ่งชี้การรวม

กระบวนการกำจัดองค์ประกอบที่ตรงตามเงื่อนไขนั้นเทียบเท่ากับกระบวนการออกจากองค์ประกอบ (การแยก) ที่ไม่เป็นไปตามเงื่อนไข สัญกรณ์ความเข้าใจรายการใช้สำหรับการประมวลผลประเภทนี้

ตัวอย่างของการลบองค์ประกอบคี่หรือคู่ (= ออกจากองค์ประกอบคู่หรือคี่) แสดงอยู่ด้านล่าง
%นี่คือตัวดำเนินการที่เหลือ
i % 2
นี่คือเศษเหลือของ i หารด้วย 2

ในสัญกรณ์ความเข้าใจรายการ รายการใหม่จะถูกสร้างขึ้น ต่างจากวิธีประเภทรายการที่แนะนำจนถึงตอนนี้ รายการดั้งเดิมยังคงไม่เปลี่ยนแปลง

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print([i for i in l if i % 2 == 0])
# [0, 2, 4, 6, 8]

print([i for i in l if i % 2 != 0])
# [1, 3, 5, 7, 9]

print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

ตัวอย่างอื่นๆ สามารถประมวลผลได้หลากหลายขึ้นอยู่กับนิพจน์เงื่อนไข

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']

print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']

print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']

หากคุณต้องการลบองค์ประกอบที่ซ้ำกัน ให้ใช้ประเภทชุด

print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']