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ư
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
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
5:def del_method[]:
global a
global index
del a[index]
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
5:a = range[10]
index = 3
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:
210 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
- Xóa một mục theo chỉ mục và nhận được giá trị của nó:
310 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
- Xóa một mục theo giá trị:
410 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
- Xóa các mục bằng chỉ mục hoặc lát:
6a = range[10] index = 3
- 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
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
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
3l = [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
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
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
4Xóa các mục bằng chỉ mục hoặc lát:
a = range[10]
index = 3
6class 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 ]
0Xó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 ]
1Xem 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 ]
2Thê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 ]
3Bạ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
3.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
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à
5.def pop_method[]: global a global index a.pop[index]
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
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
Xóa các mục bằng chỉ mục hoặc lát:
a = range[10]
index = 3
6class 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 ]
4Xó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 ]
5Xem 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 ]
6Bạ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
3.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
Xóa các mục bằng chỉ mục hoặc lát: a = range[10]
index = 3
6
a = range[10]
index = 3
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 ]
7Thê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 ]
8Bạ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 ]
9Bạ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
0Chỉ 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à
5.def pop_method[]: global a global index a.pop[index]
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
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
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
1Xem 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
2Xem 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