Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีลบองค์ประกอบในช่วงดัชนี (Range) ใน Python

การลบองค์ประกอบเดี่ยวจากลิสต์ใน 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 โดยไม่สร้างลิสต์ใหม่