How do I remove the first item from a list?
[0, 1, 2, 3] → [1, 2, 3]
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can find a short collection of useful list functions here.
>>> l = ['a', 'b', 'c', 'd'] >>> l.pop(0) 'a' >>> l ['b', 'c', 'd'] >>>
>>> 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
Method 2
Slicing:
x = [0,1,2,3,4] x = x[1:]
Which would actually return a subset of the original but not modify it.
Method 3
>>> x = [0, 1, 2, 3, 4] >>> x.pop(0) 0
Method 4
With list slicing, see the Python tutorial about lists for more details:
>>> l = [0, 1, 2, 3, 4] >>> l[1:] [1, 2, 3, 4]
Method 5
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
Method 6
Then just delete it:
x = [0, 1, 2, 3, 4] del x[0] print x # [1, 2, 3, 4]
Method 7
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]
Method 8
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
Method 9
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]
Method 10
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!
Method 11
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]
Method 12
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]
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0