การลบองค์ประกอบเดี่ยวจากลิสต์ใน Python ทำได้ง่ายด้วยดัชนีและคำสั่ง del แต่บางครั้งเราต้องการลบหลายองค์ประกอบพร้อมกันตามช่วงดัชนีที่กำหนด บทความนี้สำรวจวิธีการลบองค์ประกอบตามลิสต์ดัชนีที่ระบุ
1. ใช้ sort() และ del
วิธีนี้สร้างลิสต์ดัชนีที่ต้องการลบ เรียงลำดับจากมากไปน้อย (reverse) เพื่อรักษาลำดับเดิมของลิสต์ จากนั้นใช้ del ลบทีละดัชนี
ตัวอย่าง
Alist = [11, 6, 8, 3, 2]
# ลิสต์ดัชนีที่ต้องการลบ
idx_list = [1, 3, 0]
print("Given list is : ", Alist)
print("The indices list is : ", idx_list)
# เรียงลำดับดัชนีจากมากไปน้อย แล้วลบทีละตัว
for i in sorted(idx_list, reverse=True):
del Alist[i]
print("List after deleted elements : ", Alist)
ผลลัพธ์
Given list is : [11, 6, 8, 3, 2] The indices list is : [1, 3, 0] List after deleted elements : [8, 2]
หลังเรียงลำดับและกลับด้าน idx_list จะกลายเป็น [3, 1, 0] ดังนั้นจึงลบองค์ประกอบที่ตำแหน่ง 3, 1, 0 ตามลำดับ
2. ใช้ enumerate และ not in
วิธีนี้ใช้ list comprehension ร่วมกับ enumerate และเงื่อนไข not in เพื่อกรององค์ประกอบที่ไม่ได้อยู่ในลิสต์ดัชนีที่ต้องการลบ
ตัวอย่าง
Alist = [11, 6, 8, 3, 2]
idx_list = [1, 3, 0]
print("Given list is : ", Alist)
print("The indices list is : ", idx_list)
# ใช้ list comprehension กรององค์ประกอบที่ดัชนีไม่อยู่ใน idx_list
Alist[:] = [j for i, j in enumerate(Alist) if i not in idx_list]
print("List after deleted elements : ", Alist)
ผลลัพธ์
Given list is : [11, 6, 8, 3, 2] The indices list is : [1, 3, 0] List after deleted elements : [8, 2]
สรุป: วิธีที่ 2 (enumerate + not in) เขียนสั้นกว่าและอ่านง่ายกว่า เหมาะสำหรับกรณีทั่วไป ในขณะที่วิธีที่ 1 (sort + del) เหมาะเมื่อต้องการแก้ไขลิสต์เดิมแบบ in-place โดยไม่สร้างลิสต์ใหม่