Làm thế nào để loại bỏ Mục đầu tiên khỏi danh sách?


773

Tôi có danh sách [0, 1, 2, 3, 4]tôi muốn đưa nó vào [1, 2, 3, 4]. Làm thế nào để tôi đi về điều này?

Câu trả lời:


1259

Danh sách Python

list.pop (chỉ mục)

>>> l = ['a', 'b', 'c', 'd']
>>> l.pop(0)
'a'
>>> l
['b', 'c', 'd']
>>> 

danh sách del [chỉ mục]

>>> l = ['a', 'b', 'c', 'd']
>>> del l[0]
>>> l
['b', 'c', 'd']
>>> 

Cả hai đều sửa đổi danh sách ban đầu của bạn.

Những người khác đã đề nghị sử dụng cắt lát:

  • Sao chép danh sách
  • Có thể trả về một tập hợp con

Ngoài ra, nếu bạn đang biểu diễn nhiều pop (0), bạn nên xem bộ sưu tập.deque

from collections import deque
>>> l = deque(['a', 'b', 'c', 'd'])
>>> l.popleft()
'a'
>>> l
deque(['b', 'c', 'd'])
  • Cung cấp hiệu suất cao hơn xuất hiện từ cuối bên trái của danh sách

Bạn cũng có thể sử dụng các chỉ mục phủ định, có cùng ý nghĩa với các danh sách.
Gabriel Devillers

189

Cắt lát:

x = [0,1,2,3,4]
x = x[1:]

Mà thực sự sẽ trả về một tập hợp con của bản gốc nhưng không sửa đổi nó.


17
nếu xtrống, x=x[1:]sẽ để trống mà không phàn nàn. x.pop(0)sẽ ném cho một danh sách trống x. Đôi khi ném là điều người ta muốn: Nếu giả định rằng có ít nhất một yếu tố trong danh sách là sai, người ta có thể muốn được thông báo.
ead

Cám ơn vì cái này! Đây là một câu trả lời tốt hơn, imo, bởi vì nó không phá hủy
Hee Jin


29

Với việc cắt danh sách, hãy xem hướng dẫn Python về danh sách để biết thêm chi tiết:

>>> l = [0, 1, 2, 3, 4]
>>> l[1:]
[1, 2, 3, 4]

29

bạn sẽ làm điều này

l = [0, 1, 2, 3, 4]
l.pop(0)

hoặc là l = l[1:]

Ưu và nhược điểm

Sử dụng pop bạn có thể lấy giá trị

nói x = l.pop(0) xsẽ là0


15

Sau đó chỉ cần xóa nó:

x = [0, 1, 2, 3, 4]
del x[0]
print x
# [1, 2, 3, 4]

8

Bạn có thể sử dụng list.reverse()để đảo ngược danh sách, sau đó list.pop()xóa phần tử cuối cùng, ví dụ:

l = [0, 1, 2, 3, 4]
l.reverse()
print l
[4, 3, 2, 1, 0]


l.pop()
0
l.pop()
1
l.pop()
2
l.pop()
3
l.pop()
4

5

Bạn cũng có thể sử dụng list.remove(a[0])để popđưa ra phần tử đầu tiên trong danh sách.

>>>> a=[1,2,3,4,5]
>>>> a.remove(a[0])
>>>> print a
>>>> [2,3,4,5]

3
OP không hỏi về cách tốt nhất để làm điều đó. Đây chỉ là một cách tiếp cận khác để đạt được như vậy!
đỉnh

1
Vâng, một cách tiếp cận khác không có lợi thế hơn các câu trả lời khác. Có bất kỳ số cách để làm điều đó. Tại sao không đưa ra một câu trả lời a.remove(a[1-1])? Đó là một cách khác.
Ned Batchelder

2
Quan điểm của tôi là câu trả lời của bạn tệ hơn các câu trả lời khác, và không có gì để giới thiệu. Không có lý do để sử dụng câu trả lời này hơn những người khác. Chỉ vì "cách khác" không phải là lý do để thêm nó vào đây.
Ned Batchelder

4
@NedBatchelder Quan điểm của bạn là tranh luận. Đó là một phương pháp bổ sung có sẵn cho các danh sách trong Python, cụ thể cho tác vụ cụ thể này và để hoàn thiện nó, cần lưu ý. Mặt khác, BS giả định [1-1], không phải vậy. Chưa kể rằng câu trả lời của anh ta không "tệ hơn các câu trả lời khác" theo bất kỳ cách nào.
Hejazzman

8
Tôi đứng trước câu hỏi của tôi: điều này có vẻ kỳ lạ và giả tạo, và không có gì để giới thiệu nó. Trong thực tế, câu đầu tiên là sai lệch, bởi vì bạn không thể loại bỏ phần tử thứ i với list.remove(a[i]). Với các giá trị trùng lặp, nó có thể tìm thấy một phần tử trước đó có cùng giá trị và xóa phần tử đó thay vì phần tử thứ i.
Ned Batchelder

4

Nếu bạn đang làm việc với numpy, bạn cần sử dụng phương thức xóa :

import numpy as np

a = np.array([1, 2, 3, 4, 5])

a = np.delete(a, 0)

print(a) # [2 3 4 5]

1

Có một cơ sở hạ tầng được gọi là "deque" hoặc hàng đợi kết thúc gấp đôi, nhanh hơn và hiệu quả hơn một danh sách. Bạn có thể sử dụng danh sách của mình và chuyển đổi nó thành deque và thực hiện các biến đổi cần thiết trong đó. Bạn cũng có thể chuyển đổi deque trở lại danh sách.

import collections
mylist = [0, 1, 2, 3, 4]

#make a deque from your list
de = collections.deque(mylist)

#you can remove from a deque from either left side or right side
de.popleft()
print(de)

#you can covert the deque back to list
mylist = list(de)
print(mylist)

Deque cũng cung cấp các chức năng rất hữu ích như chèn các phần tử vào một trong hai phía của danh sách hoặc cho bất kỳ chỉ mục cụ thể nào. Bạn cũng có thể xoay hoặc đảo ngược một deque. Hãy thử một lần!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.