Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Xóa phần tử từ list theo danh sách index trong Python

Cho L1 (list gốc) và L2 (list index cần xóa).

>>> L1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L2 = [2, 4, 6]

Giải pháp: enumerate + delete

>>> e = enumerate(L1)
>>> for i, j in e:
...     if i in L2:
...         del L1[i]

>>> L1
[1, 2, 4, 5, 7, 8]

Vấn đề: Xóa trong khi iterate list đang thay đổi index → kết quả sai nếu xóa nhiều index liên tiếp. Cách tốt hơn:

Cách an toàn: Tạo list mới (filter)

L1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
L2 = {2, 4, 6}  # Dùng set để O(1) lookup

L1 = [val for idx, val in enumerate(L1) if idx not in L2]
print(L1)  # [1, 2, 4, 5, 7, 8]

Cách khác: Xóa từ cuối lên đầu

for i in sorted(L2, reverse=True):
    del L1[i]