Xóa list python

3/9/2009 6:16:11 PM

Phan Quang Sơn · Phan Quang Sơn 18:16 09/03/2009

Làm cách nào để xóa phần tử khỏi danh sách theo chỉ mục trong Python?

Tôi đã tìm thấy list.removephương thức, nhưng nói rằng tôi muốn loại bỏ phần tử cuối cùng, làm thế nào để tôi làm điều này? Có vẻ như mặc định xóa tìm kiếm danh sách, nhưng tôi không muốn bất kỳ tìm kiếm nào được thực hiện.

1199 hữu ích 5 bình luận 2.1m xem chia sẻ

answer

Vũ Minh Ðức · Vũ Minh Ðức 18:21 09/03/2009

Sử dụng delvà chỉ định chỉ mục của thành phần bạn muốn xóa:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> del a[-1] >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8]

Cũng hỗ trợ các lát:

>>> del a[2:4] >>> a [0, 1, 4, 5, 6, 7, 8, 9]

Đây là phần từ hướng dẫn.

1408 hữu ích 5 bình luận chia sẻ

answer

Tạ Thu Việt · Tạ Thu Việt 18:17 09/03/2009

Bạn có thể muốn pop:

a = ['a', 'b', 'c', 'd'] a.pop[1] # now a is ['a', 'c', 'd']

Theo mặc định, popkhông có bất kỳ đối số nào sẽ xóa mục cuối cùng:

a = ['a', 'b', 'c', 'd'] a.pop[] # now a is ['a', 'b', 'c']

560 hữu ích 5 bình luận chia sẻ

answer

Lê Ánh Trang · Lê Ánh Trang 15:21 22/06/2014

Giống như những người khác đã đề cập đến 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 [điều này không thực hiện trong việc loại bỏ mục khỏi danh sách ban đầu]:

[Ngoài ra, đây sẽ là phương pháp kém hiệu quả nhất khi làm việc với danh sách Python, nhưng điều này có thể hữu ích [nhưng không hiệu quả, tôi nhắc lại] khi làm việc với các đối tượng do người dùng xác định không hỗ trợ pop, nhưng vẫn xác định a __getitem__]:

>>> 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ư popvà del. Nó thay vào đó tạo hai bản sao của danh sách [một từ đầu cho đến chỉ mục nhưng không có nó [ a[:index]] và một sau chỉ mục cho đến phần tử cuối cùng [ a[index+1:]]] 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 gán lại cho biến danh sách [ a]. Do đó, đối tượng danh sách cũ bị hủy đăng ký 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 ngoài 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 vẫn chưa được sửa đổi].

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

Đây câu trả lời Stack Overflow giải thích các khái niệm về cắ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.

Trong khi sử dụng với các đối tượng, __getitem__phương thức phải được xác định và quan trọng hơn là __add__phương thức phải được xác định để trả về một đối tượng có chứa các mục từ cả hai toán hạng.

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 làm việc với listđịnh nghĩa __getitem__và __add__phương pháp.

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

Giả sử sau đây được xác định trước:

a = range[10] index = 3

Các del object[index]phương pháp:

Cho đến nay 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 một __del__phương thức.

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

Mã số:

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

Tháo gỡ:

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

pop phương pháp:

Nó kém hiệu quả hơn phương thức del và được sử dụng khi bạn cần lấy mục đã xóa.

Mã số:

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

Tháo gỡ:

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.

Mã số:

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

Tháo gỡ:

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 phân tách, bỏ qua hai dòng cuối cùng về cơ bản là return None. Ngoài ra hai dòng đầu tiên đang tải các giá trị toàn cầu avà index.

115 hữu ích 5 bình luận chia sẻ

answer

Hoàng Huy Tuấn · Hoàng Huy Tuấn 13:10 19/10/2013

popcũng hữu ích để loại bỏ và giữ một mục từ danh sách. Trường hợp delthực sự bỏ rác các mặt hàng.

>>> x = [1, 2, 3, 4] >>> p = x.pop[1] >>> p 2

48 hữu ích 0 bình luận chia sẻ

answer

Đỗ Kim Ngọc · Đỗ Kim Ngọc 00:17 11/08/2017

Điều này phụ thuộc vào những gì bạn muốn làm.

Nếu bạn muốn trả về phần tử bạn đã xóa, hãy sử dụng pop[]:

>>> l = [1, 2, 3, 4, 5] >>> l.pop[2] 3 >>> l [1, 2, 4, 5]

Tuy nhiên, nếu bạn chỉ muốn xóa một phần tử, hãy sử dụng del:

>>> l = [1, 2, 3, 4, 5] >>> del l[2] >>> l [1, 2, 4, 5]

Ngoài ra, delcho phép bạn sử dụng các lát [ví dụ del[2:]].

16 hữu ích 0 bình luận chia sẻ

answer

Đỗ Kim Điệp · Đỗ Kim Điệp 12:23 05/10/2015

Nói chung, tôi đang sử dụng phương pháp sau:

>>> myList = [10,20,30,40,50] >>> rmovIndxNo = 3 >>> del myList[rmovIndxNo] >>> myList [10, 20, 30, 50]

15 hữu ích 0 bình luận chia sẻ

answer

Huỳnh Thủy Minh · Huỳnh Thủy Minh 09:21 30/10/2017

Tuy nhiên, một cách khác để loại bỏ [các] thành phần khỏi danh sách theo chỉ mục.

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # remove the element at index 3 a[3:4] = [] # a is now [0, 1, 2, 4, 5, 6, 7, 8, 9] # remove the elements from index 3 to index 6 a[3:7] = [] # a is now [0, 1, 2, 7, 8, 9]

a [x: y] trỏ đến các phần tử từ chỉ mục xđến y-1. Khi chúng tôi khai báo phần đó của danh sách dưới dạng danh sách trống [ []], các phần tử đó sẽ bị xóa.

11 hữu ích 0 bình luận chia sẻ

answer

Hồ Bảo Ngọc · Hồ Bảo Ngọc 13:09 15/02/2017

Bạn chỉ có thể tìm kiếm các mục bạn muốn xóa. Nó thực sự đơn giản. Thí dụ:

letters = ["a", "b", "c", "d", "e"] letters.remove[letters[1]] print[*letters] # Used with a * to make it unpack you don't have to [Python 3.x or newer]

Đầu ra: acde

9 hữu ích 2 bình luận chia sẻ

answer

Hoàng Nghĩa Hiếu · Hoàng Nghĩa Hiếu 13:29 14/05/2017

Sử dụng mã sau để xóa phần tử khỏi danh sách:

list = [1, 2, 3, 4] list.remove[1] print[list] output = [2, 3, 4]

Nếu bạn muốn xóa dữ liệu thành phần chỉ mục khỏi danh sách, hãy sử dụng:

list = [1, 2, 3, 4] list.remove[list[2]] print[list] output : [1, 2, 4]

8 hữu ích 2 bình luận chia sẻ

answer

Dương Bích Thủy · Dương Bích Thủy 03:15 28/06/2016

Như đã đề cập trước đây, thực hành tốt nhất là del []; hoặc pop [] nếu bạn cần biết giá trị.

Một giải pháp thay thế là chỉ xếp lại các yếu tố bạn muốn:

a = ['a', 'b', 'c', 'd'] def remove_element[list_,index_]: clipboard = [] for i in range[len[list_]]: if i is not index_: clipboard.append[list_[i]] return clipboard print[remove_element[a,2]] >> ['a', 'b', 'd']

eta: hmm ... sẽ không hoạt động trên các giá trị chỉ số âm, sẽ suy ngẫm và cập nhật

tôi giả sử

if index_>> test = ['item1', 'item2'] >>> test.pop[-1] 'item2' >>> test ['item1']

6 hữu ích 1 bình luận chia sẻ

answer

Trịnh Tuấn Hải · Trịnh Tuấn Hải 16:46 25/09/2017

l - danh sách các giá trị; chúng ta phải xóa các chỉ mục khỏi danh sách inds2rem .

l = range[20] inds2rem = [2,5,1,7] map[lambda x: l.pop[x], sorted[inds2rem, key = lambda x:-x]] >>> l [0, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

6 hữu ích 3 bình luận chia sẻ

answer

Dương Minh Nhu · Dương Minh Nhu 02:38 24/07/2018

Nếu bạn muốn xóa phần tử vị trí cụ thể trong danh sách, như thứ 2, 3 và 7. bạn không thể sử dụng

del my_list[2] del my_list[3] del my_list[7]

Vì sau khi bạn xóa phần tử thứ hai, phần tử thứ ba bạn xóa thực sự là phần tử thứ tư trong danh sách gốc. Bạn có thể lọc phần tử thứ 2, 3 và 7 trong danh sách gốc và nhận danh sách mới, như bên dưới:

new list = [j for i, j in enumerate[my_list] if i not in [2, 3, 7]]

6 hữu ích 1 bình luận chia sẻ

answer

Tạ Ngọc Tùng · Tạ Ngọc Tùng 11:05 04/06/2017

Sử dụng chức năng "del" :

del listName[-N]

Ví dụ: nếu bạn muốn xóa 3 mục cuối, mã của bạn phải là:

del listName[-3:]

Ví dụ: nếu bạn muốn xóa 8 mục cuối, mã của bạn phải là:

del listName[-8:]

5 hữu ích 1 bình luận chia sẻ

answer

Dương Bích Quyên · Dương Bích Quyên 03:00 01/02/2016

Người ta có thể sử dụng del hoặc pop, nhưng tôi thích del hơn, vì bạn có thể chỉ định chỉ mục và lát, cho phép người dùng kiểm soát dữ liệu nhiều hơn.

Ví dụ, bắt đầu với danh sách được hiển thị, người ta có thể loại bỏ phần tử cuối cùng của nó deldưới dạng một lát và sau đó người ta có thể loại bỏ phần tử cuối cùng khỏi kết quả bằng cách sử dụng pop.

>>> l = [1,2,3,4,5] >>> del l[-1:] >>> l [1, 2, 3, 4] >>> l.pop[-1] 4 >>> l [1, 2, 3]

1 hữu ích 0 bình luận chia sẻ

answer

Dương Cẩm Linh · Dương Cẩm Linh 04:59 13/12/2016

Bạn có thể sử dụng del hoặc pop để xóa phần tử khỏi danh sách dựa trên chỉ mục. Pop sẽ in thành viên mà nó đang xóa khỏi danh sách, trong khi danh sách xóa thành viên đó mà không in nó.

>>> a=[1,2,3,4,5] >>> del a[1] >>> a [1, 3, 4, 5] >>> a.pop[1] 3 >>> a [1, 4, 5] >>>

0 hữu ích 0 bình luận chia sẻ

answer

Tạ Bá Tùng · Tạ Bá Tùng 06:13 23/09/2018

Hoặc nếu nhiều chỉ mục cần được loại bỏ:

print[[v for i,v in enumerate[your_list] if i not in list_of_unwanted_indexes]]

Tất nhiên sau đó cũng có thể làm:

print[[v for i,v in enumerate[your_list] if i != unwanted_index]]

0 hữu ích 1 bình luận chia sẻ

answer

Đặng Hồng Sương · Đặng Hồng Sương 07:08 09/02/2019

Nhưng không bao giờ sử dụng pop [] với vòng lặp .it sẽ gây ra lỗi .use pop [] không có vòng lặp.

0 hữu ích 0 bình luận chia sẻ

Xem nguồn: //stackoverflow.com//questions/627435/how-do-i-remove-an-element-from-a-list-by-index-in-python

Video liên quan

Chủ Đề