The most efficient way to remove first N elements in a list? The most efficient way to remove first N elements in a list? python-3.x python-3.x

The most efficient way to remove first N elements in a list?


You can use list slicing to archive your goal.

Remove the first 5 elements:

n = 5mylist = [1,2,3,4,5,6,7,8,9]newlist = mylist[n:]print newlist

Outputs:

[6, 7, 8, 9]

Or del if you only want to use one list:

n = 5mylist = [1,2,3,4,5,6,7,8,9]del mylist[:n]print mylist

Outputs:

[6, 7, 8, 9]


Python lists were not made to operate on the beginning of the list and are very ineffective at this operation.

While you can write

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

It's very inefficient.


If you only want to delete items from your list, you can do this with del:

del mylist[:n]

Which is also really fast:

In [34]: %%timeithelp=range(10000)while help:    del help[:1000]   ....:10000 loops, best of 3: 161 µs per loop

If you need to obtain elements from the beginning of the list, you should use collections.deque by Raymond Hettinger and its popleft() method.

from collections import dequedeque(['f', 'g', 'h', 'i', 'j'])>>> d.pop()                          # return and remove the rightmost item'j'>>> d.popleft()                      # return and remove the leftmost item'f'

A comparison:

list + pop(0)

In [30]: %%timeit   ....: help=range(10000)   ....: while help:   ....:     help.pop(0)   ....:100 loops, best of 3: 17.9 ms per loop

deque + popleft()

In [33]: %%timeithelp=deque(range(10000))while help:    help.popleft()   ....:1000 loops, best of 3: 812 µs per loop


l = [1, 2, 3, 4, 5]del l[0:3] # Here 3 specifies the number of items to be deleted.

This is the code if you want to delete a number of items from the list. You might as well skip the zero before the colon. It does not have that importance. This might do as well.

l = [1, 2, 3, 4, 5]del l[:3] # Here 3 specifies the number of items to be deleted.