Hướng dẫn how do you remove an item from a list at an index python? - làm cách nào để xóa một mục khỏi danh sách tại một con trăn chỉ mục?

Giống như những người khác đã đề cập POP và DEL là những cách hiệu quả để loại bỏ một mục của chỉ mục đã cho. Tuy nhiên, chỉ vì mục đích hoàn thành [vì điều tương tự có thể được thực hiện thông qua nhiều cách trong Python]:

Sử dụng các lát cắt [điều này không thực hiện để loại bỏ mục khỏi danh sách ban đầu]:

.

>>> a = [1, 2, 3, 4, 5, 6]
>>> index = 3 # Only positive index

>>> a = a[:index] + a[index+1 :]
# a is now [1, 2, 3, 5, 6]

Lưu ý: Xin lưu ý rằng phương pháp này không sửa đổi danh sách tại chỗ như

a = range[10]
index = 3
5 và
a = range[10]
index = 3
6. Thay vào đó, nó tạo ra hai bản sao danh sách [một từ đầu cho đến khi chỉ mục nhưng không có nó [
a = range[10]
index = 3
7] và một bản sau chỉ mục cho đến phần tử cuối cùng [
a = range[10]
index = 3
8]] và tạo một đối tượng danh sách mới bằng cách thêm cả hai. Điều này sau đó được chỉ định lại vào biến danh sách [
a = range[10]
index = 3
9]. Đối tượng Danh sách cũ do đó bị bỏ rơi và do đó rác được thu thập [với điều kiện đối tượng danh sách ban đầu không được tham chiếu bởi bất kỳ biến nào khác ngoài a].
Please note that this method does not modify the list in place like
a = range[10]
index = 3
5 and
a = range[10]
index = 3
6. It instead makes two copies of lists [one from the start until the index but without it [
a = range[10]
index = 3
7] and one after the index till the last element [
a = range[10]
index = 3
8]] and creates a new list object by adding both. This is then reassigned to the list variable [
a = range[10]
index = 3
9]. The old list object is hence dereferenced and hence garbage collected [provided the original list object is not referenced by any variable other than a].

Điều này làm cho phương pháp này rất không hiệu quả và nó cũng có thể tạo ra các tác dụng phụ không mong muốn [đặc biệt là khi các biến khác trỏ đến đối tượng danh sách ban đầu không được sửa đổi].

Cảm ơn @markdickinson đã chỉ ra điều này ...

Câu trả lời tràn ngăn xếp này giải thích khái niệm cắt lát.

Cũng lưu ý rằng điều này chỉ hoạt động với các chỉ số tích cực.

Mặc dù sử dụng với các đối tượng, phương thức

a = range[10]
index = 3
4 phải được xác định và quan trọng hơn là phương thức
def del_method[]:
    global a
    global index
    del a[index]
1 phải được xác định để trả về một đối tượng chứa các mục từ cả hai toán hạng.
def del_method[]:
    global a
    global index
    del a[index]
1
method must have been defined to return an object containing items from both the operands.

Về bản chất, điều này hoạt động với bất kỳ đối tượng nào có định nghĩa lớp giống như:

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]

Điều này hoạt động với

def del_method[]:
    global a
    global index
    del a[index]
2 xác định các phương thức
a = range[10]
index = 3
4 và
def del_method[]:
    global a
    global index
    del a[index]
1.

So sánh ba cách về hiệu quả:

Giả sử những điều sau đây được xác định trước:

a = range[10]
index = 3

Phương pháp

def del_method[]:
    global a
    global index
    del a[index]
5:

Cho đến nay là phương pháp hiệu quả nhất. Nó hoạt động sẽ tất cả các đối tượng xác định phương thức

def del_method[]:
    global a
    global index
    del a[index]
6.

Việc tháo gỡ như sau:

Code:

def del_method[]:
    global a
    global index
    del a[index]

Disassembly:

 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None

Phương pháp

a = range[10]
index = 3
5:

Nó kém hiệu quả hơn phương pháp DEL và được sử dụng khi bạn cần có được mục đã xóa.

Code:

def pop_method[]:
    global a
    global index
    a.pop[index]

Disassembly:

 17     0 LOAD_GLOBAL     0 [a]
        3 LOAD_ATTR       1 [pop]
        6 LOAD_GLOBAL     2 [index]
        9 CALL_FUNCTION   1
       12 POP_TOP
       13 LOAD_CONST      0 [None]
       16 RETURN_VALUE

Các lát cắt và thêm phương thức.

Ít hiệu quả nhất.

Code:

def slice_method[]:
    global a
    global index
    a = a[:index] + a[index+1:]

Disassembly:

 24     0 LOAD_GLOBAL    0 [a]
        3 LOAD_GLOBAL    1 [index]
        6 SLICE+2
        7 LOAD_GLOBAL    0 [a]
       10 LOAD_GLOBAL    1 [index]
       13 LOAD_CONST     1 [1]
       16 BINARY_ADD
       17 SLICE+1
       18 BINARY_ADD
       19 STORE_GLOBAL   0 [a]
       22 LOAD_CONST     0 [None]
       25 RETURN_VALUE
None

Lưu ý: Trong cả ba sự tháo rời bỏ qua hai dòng cuối cùng về cơ bản là

def del_method[]:
    global a
    global index
    del a[index]
8. Ngoài ra, hai dòng đầu tiên đang tải các giá trị toàn cầu
a = range[10]
index = 3
9 và
 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
0.

Trong Python, sử dụng các phương thức

def del_method[]:
    global a
    global index
    del a[index]
2
 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
2,
 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
3 và
 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
4 để xóa các mục [phần tử] khỏi danh sách. Cũng có thể xóa các mục bằng cách sử dụng câu lệnh
a = range[10]
index = 3
6 bằng cách chỉ định một vị trí hoặc phạm vi có chỉ mục hoặc lát cắt.

  • Xóa tất cả các mục:
     10    0 LOAD_GLOBAL     0 [a]
           3 LOAD_GLOBAL     1 [index]
           6 DELETE_SUBSCR   # This is the line that deletes the item
           7 LOAD_CONST      0 [None]
          10 RETURN_VALUE
    None
    
    2
  • Xóa một mục theo chỉ mục và nhận được giá trị của nó:
     10    0 LOAD_GLOBAL     0 [a]
           3 LOAD_GLOBAL     1 [index]
           6 DELETE_SUBSCR   # This is the line that deletes the item
           7 LOAD_CONST      0 [None]
          10 RETURN_VALUE
    None
    
    3
  • Xóa một mục theo giá trị:
     10    0 LOAD_GLOBAL     0 [a]
           3 LOAD_GLOBAL     1 [index]
           6 DELETE_SUBSCR   # This is the line that deletes the item
           7 LOAD_CONST      0 [None]
          10 RETURN_VALUE
    None
    
    4
  • Xóa các mục bằng chỉ mục hoặc lát:
    a = range[10]
    index = 3
    
    6
  • Xóa các mục đáp ứng điều kiện: Danh sách toàn diện

Xem bài viết sau đây về cách thêm một mục vào danh sách.

  • Thêm một mục vào danh sách trong Python [Phụ lục, mở rộng, chèn]

Xóa tất cả các mục:
 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
2

Xóa một mục theo chỉ mục và nhận được giá trị của nó:

 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
3

l = [0, 1, 2]

l.clear[]
print[l]
# []

Xóa một mục theo chỉ mục và nhận được giá trị của nó:
 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
3

Xóa một mục theo giá trị:

 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
4

Xóa các mục bằng chỉ mục hoặc lát:

a = range[10]
index = 3
6

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
0

Xóa các mục đáp ứng điều kiện: Danh sách toàn diện

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
1

Xem bài viết sau đây về cách thêm một mục vào danh sách.

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
2

Thêm một mục vào danh sách trong Python [Phụ lục, mở rộng, chèn]

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
3

Bạn có thể xóa tất cả các mục khỏi danh sách với

 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
2.

  • Bạn có thể xóa mục tại vị trí được chỉ định và nhận giá trị của nó với
     10    0 LOAD_GLOBAL     0 [a]
           3 LOAD_GLOBAL     1 [index]
           6 DELETE_SUBSCR   # This is the line that deletes the item
           7 LOAD_CONST      0 [None]
          10 RETURN_VALUE
    None
    
    3.

Chỉ số ở đầu là

def pop_method[]:
    global a
    global index
    a.pop[index]
4 [lập chỉ mục dựa trên không].

  • Bạn có thể sử dụng các giá trị âm để chỉ định vị trí từ cuối. Chỉ số ở cuối là
    def pop_method[]:
        global a
        global index
        a.pop[index]
    
    5.

Xóa một mục theo giá trị:
 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
4

Xóa các mục bằng chỉ mục hoặc lát:

a = range[10]
index = 3
6

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
4

Xóa các mục đáp ứng điều kiện: Danh sách toàn diện

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
5

Xem bài viết sau đây về cách thêm một mục vào danh sách.

Thêm một mục vào danh sách trong Python [Phụ lục, mở rộng, chèn]

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
6

Bạn có thể xóa tất cả các mục khỏi danh sách với

 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
2.

  • Bạn có thể xóa mục tại vị trí được chỉ định và nhận giá trị của nó với
     10    0 LOAD_GLOBAL     0 [a]
           3 LOAD_GLOBAL     1 [index]
           6 DELETE_SUBSCR   # This is the line that deletes the item
           7 LOAD_CONST      0 [None]
          10 RETURN_VALUE
    None
    
    3.

Xóa các mục bằng chỉ mục hoặc lát:
a = range[10]
index = 3
6

Xóa các mục đáp ứng điều kiện: Danh sách toàn diện

Xem bài viết sau đây về cách thêm một mục vào danh sách.

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
7

Thêm một mục vào danh sách trong Python [Phụ lục, mở rộng, chèn]

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
8

Bạn có thể xóa tất cả các mục khỏi danh sách với

 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
2.

class foo[object]:
    def __init__[self, items]:
        self.items = items

    def __getitem__[self, index]:
        return foo[self.items[index]]

    def __add__[self, right]:
        return foo[ self.items + right.items ]
9

Bạn có thể xóa mục tại vị trí được chỉ định và nhận giá trị của nó với

 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
3.

a = range[10]
index = 3
0

Chỉ số ở đầu là

def pop_method[]:
    global a
    global index
    a.pop[index]
4 [lập chỉ mục dựa trên không].

  • Bạn có thể sử dụng các giá trị âm để chỉ định vị trí từ cuối. Chỉ số ở cuối là
    def pop_method[]:
        global a
        global index
        a.pop[index]
    
    5.

Xóa các mục đáp ứng điều kiện: Danh sách toàn diện

Xem bài viết sau đây về cách thêm một mục vào danh sách.

Thêm một mục vào danh sách trong Python [Phụ lục, mở rộng, chèn]

  • Bạn có thể xóa tất cả các mục khỏi danh sách với
     10    0 LOAD_GLOBAL     0 [a]
           3 LOAD_GLOBAL     1 [index]
           6 DELETE_SUBSCR   # This is the line that deletes the item
           7 LOAD_CONST      0 [None]
          10 RETURN_VALUE
    None
    
    2.

Bạn có thể xóa mục tại vị trí được chỉ định và nhận giá trị của nó với

 10    0 LOAD_GLOBAL     0 [a]
       3 LOAD_GLOBAL     1 [index]
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 [None]
      10 RETURN_VALUE
None
3.

Chỉ số ở đầu là

def pop_method[]:
    global a
    global index
    a.pop[index]
4 [lập chỉ mục dựa trên không].

a = range[10]
index = 3
1

Xem bài viết sau đây để biết chi tiết về trích xuất các yếu tố bằng cách sử dụng toàn bộ danh sách.

  • Trích xuất, thay thế, chuyển đổi các yếu tố của một danh sách trong Python

Các ví dụ khác như sau.

a = range[10]
index = 3
2

Xem bài viết sau đây để biết ví dụ cho một danh sách các chuỗi.

  • Trích xuất và thay thế các yếu tố đáp ứng các điều kiện của một danh sách các chuỗi trong Python

Nếu bạn muốn loại bỏ các yếu tố trùng lặp, hãy sử dụng

 24     0 LOAD_GLOBAL    0 [a]
        3 LOAD_GLOBAL    1 [index]
        6 SLICE+2
        7 LOAD_GLOBAL    0 [a]
       10 LOAD_GLOBAL    1 [index]
       13 LOAD_CONST     1 [1]
       16 BINARY_ADD
       17 SLICE+1
       18 BINARY_ADD
       19 STORE_GLOBAL   0 [a]
       22 LOAD_CONST     0 [None]
       25 RETURN_VALUE
None
1.

  • Xóa/Trích xuất các yếu tố trùng lặp khỏi danh sách trong Python

a = range[10]
index = 3
3

Làm cách nào để xóa một giá trị cụ thể khỏi chỉ mục danh sách?

Phương pháp 1: Xóa một mục theo chỉ mục và nhận giá trị của nó bằng pop [].
Phương pháp 2: Xóa các mục bằng chỉ mục hoặc lát bằng DEL ..
Phương pháp 4: Xóa các mục tại một chỉ mục cụ thể bằng cách sử dụng sự hiểu biết danh sách [] + danh sách ..

Bài Viết Liên Quan

Chủ Đề