如何从列表中删除第一项?
- 2025-04-15 09:20:00
- admin 原创
- 34
问题描述:
如何从列表中删除第一项?
[0, 1, 2, 3] → [1, 2, 3]
解决方案 1:
您可以在此处找到一些有用的列表函数。
list.pop(index)
>>> l = ['a', 'b', 'c', 'd']
>>> l.pop(0)
'a'
>>> l
['b', 'c', 'd']
>>>
del list[index]
>>> l = ['a', 'b', 'c', 'd']
>>> del l[0]
>>> l
['b', 'c', 'd']
>>>
这两者都修改了您的原始列表。
其他人建议使用切片:
复制列表
可以返回一个子集
此外,如果你正在执行许多操作pop(0)
,你应该看看collections.deque
from collections import deque
>>> l = deque(['a', 'b', 'c', 'd'])
>>> l.popleft()
'a'
>>> l
deque(['b', 'c', 'd'])
从列表左端弹出提供更高的性能
解决方案 2:
切片:
x = [0,1,2,3,4]
x = x[1:]
这实际上会返回原始内容的子集但不会对其进行修改。
解决方案 3:
>>> x = [0, 1, 2, 3, 4]
>>> x.pop(0)
0
更多信息请见此处。
解决方案 4:
对于列表切片,请参阅有关列表的 Python 教程以了解更多详细信息:
>>> l = [0, 1, 2, 3, 4]
>>> l[1:]
[1, 2, 3, 4]
解决方案 5:
你只需要这样做
l = [0, 1, 2, 3, 4]
l.pop(0)
或者l = l[1:]
优点和缺点
使用 pop 可以检索值
说x = l.pop(0)
x
会是0
解决方案 6:
然后删除它:
x = [0, 1, 2, 3, 4]
del x[0]
print x
# [1, 2, 3, 4]
解决方案 7:
拆包任务:
您可以使用PEP 3132中提到的解包分配。
解决方案:
您应该尝试按如下方式解包:
>>> l = [0, 1, 2, 3, 4]
>>> _, *l = l
>>> l
[1, 2, 3, 4]
解释:
正如PEP 3132中提到的:
本 PEP 建议对可迭代解包语法进行更改,允许指定一个“catch-all”名称,该名称将被分配一个未分配给“常规”名称的所有项目的列表。
一个例子胜过千言万语:
>>> a, *b, c = range(5) >>> a 0 >>> c 4 >>> b [1, 2, 3]
解决方案 8:
有一种称为deque
双端队列的数据结构,它比列表更快、更高效。你可以使用列表并将其转换为双端队列,并在其中进行所需的转换。你也可以将双端队列转换回列表。
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)
双端队列还提供了一些非常有用的功能,例如将元素插入到列表的任意一侧或任何特定索引处。你还可以旋转或反转双端队列。快来试试吧!
解决方案 9:
您还可以使用它list.remove(a[0])
来pop
取出列表中的第一个元素。
>>>> a=[1,2,3,4,5]
>>>> a.remove(a[0])
>>>> print a
>>>> [2,3,4,5]
解决方案 10:
如果您使用numpy,则需要使用delete方法:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
a = np.delete(a, 0)
print(a) # [2 3 4 5]
解决方案 11:
您可以使用list.reverse()
来反转列表,然后list.pop()
删除最后一个元素,例如:
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
解决方案 12:
这对我来说是可行的,而不是pop
像下面这样使用,当然会是 0,因为结果/返回值pop
>>> x = [0, 1, 2, 3].pop(0)
>>> x
0
使用下面的方法将跳过第一个值:
>>> x = [0, 1, 2, 3][1:]
>>> x
[1, 2, 3]
解决方案 13:
对这里建议的方法进行了一些计时 -
from timeit import timeit
def reassign_slice(lst):
lst = lst[1:]
def delete_first_index(lst):
del lst[0]
def pop_first(lst):
lst.pop(0)
def assign_slice_as_empty_list(lst):
lst[:1] = []
def delete_slice(lst):
del lst[:1]
for suggested_method in reassign_slice, delete_first_index, pop_first, assign_slice_as_empty_list, delete_slice:
lst = list(range(10**6))
res = timeit(lambda: suggested_method(lst), number=1000)
print(f'{suggested_method.__name__} - {res}')
''' In Python 3.13.0 on Linux(OpenSUSE), I got -
reassign_slice - 3.2175468700006604
delete_first_index - 0.08350443698873278
pop_first - 0.08226470999943558
assign_slice_as_empty_list - 0.08683017300791107
delete_slice - 0.09479296299105044
'''
解决方案 14:
删除这里未提及的第一个元素的另一种方法是将空列表分配给包含第一个元素的切片:
lst = [0, 1, 2, 3]
lst[:1] = []
print(lst) # [1, 2, 3]
与 不同list.pop()
,即使列表为空,切片也不会引发 IndexError,这在某些情况下很有用(而在其他情况下则没用)。
lst = []
lst.pop(0) # <--- IndexError
del lst[:1] # <--- no error
lst[:] = lst[1:] # <--- no error
lst[:1] = [] # <--- no error
扫码咨询,免费领取项目管理大礼包!