ChatGPT解决这个技术问题 Extra ChatGPT

How do I remove the first item from a list?

How do I remove the first item from a list?

[0, 1, 2, 3]   →   [1, 2, 3]

N
Neuron

You can find a short collection of useful list functions here.

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']
>>> 

These both modify your original list.

Others have suggested using slicing:

Copies the list

Can return a subset

Also, if you are performing many pop(0), you should look at collections.deque

from collections import deque
>>> l = deque(['a', 'b', 'c', 'd'])
>>> l.popleft()
'a'
>>> l
deque(['b', 'c', 'd'])

Provides higher performance popping from left end of the list


You can also use negative indexes, which have the same meaning than with lists.
In my case, the time went down from 1:31 min. with pop(0) to 200 - 250 ms by using deque. Thank you so much.
j
justin.m.chase

Slicing:

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

Which would actually return a subset of the original but not modify it.


if x is empty, x=x[1:] would leave it empty without complaining. x.pop(0) would throw for an empty list x. Sometimes throwing is what one wants: If the assumption that there is at least an element in the list is wrong, one might want to get notified.
I like this reply much more, as mutations is almost always evil.
u
user225312
>>> x = [0, 1, 2, 3, 4]
>>> x.pop(0)
0

More on this here.


H
Haes

With list slicing, see the Python tutorial about lists for more details:

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

u
user225312

you would just do this

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

or l = l[1:]

Pros and Cons

Using pop you can retrieve the value

say x = l.pop(0) x would be 0


m
martineau

Then just delete it:

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

v
vertexion

You can also use list.remove(a[0]) to pop out the first element in the list.

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

OP is not asking about the best way to do it. This is just another approach to achieve the same!
Yes, another approach that has no advantage over the other answers. There are any number of ways to do it. Why not give an answer of a.remove(a[1-1])? That's another way.
My point is that your answer is worse that the other answers, and has nothing to recommend it. There is no reason to use this answer over the others. Just because it's "another way" isn't a reason to add it here.
@NedBatchelder Your point is moot. It's a extra method available to lists in Python, specific to this particular task, and for the sake of completeness it should be noted. The contrived BS a[1-1] example, on the other hand, it's not. Not to mention that his answer is not "worse than the other answers" in any way.
I stand by my question: this seems weird and contrived, and has nothing to recommend it. In fact, the first sentence is misleading, because you cannot remove the i'th element with list.remove(a[i]). With duplicate values, it may find an earlier element with the same value, and remove that one instead of the i'th.
M
Mohd

You can use list.reverse() to reverse the list, then list.pop() to remove the last element, for example:

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

Why do it so complicated when you can use l.pop(0)? You forgot to l.reverse() after using l.pop(). Your solution has bad performance
t
tsveti_iko

If you are working with numpy you need to use the delete method:

import numpy as np

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

a = np.delete(a, 0)

print(a) # [2 3 4 5]

N
Neuron

There is a data structure called deque or double ended queue which is faster and efficient than a list. You can use your list and convert it to deque and do the required transformations in it. You can also convert the deque back to list.

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 also provides very useful functions like inserting elements to either side of the list or to any specific index. You can also rotate or reverse a deque. Give it a try!


It is only more efficient in some cases, not across the board. It has different tradeoffs than list, and why both exist.
U
U12-Forward

Unpacking assignment:

You could use unpacking assignment as mentioned in PEP 3132.

Solution:

You should try unpacking like the following:

>>> l = [0, 1, 2, 3, 4]
>>> _, *l = l
>>> l
[1, 2, 3, 4]

Explanation:

As mentioned in PEP 3132:

This PEP proposes a change to iterable unpacking syntax, allowing to specify a "catch-all" name which will be assigned a list of all items not assigned to a "regular" name. An example says more than a thousand words: >>> a, *b, c = range(5) >>> a 0 >>> c 4 >>> b [1, 2, 3]


A
Anurag A S

This works for me, instead of using pop like below, which of course will be 0, because the result/return value of pop

>>> x = [0, 1, 2, 3].pop(0)
>>> x
0

Using this below method will skip the first value:

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