Skip to content
Advertisement

Pop multiple items from the beginning and end of a list

Suppose I have a list of items like this:

mylist=['a','b','c','d','e','f','g','h','i']

I want to pop two items from the left (i.e. a and b) and two items from the right (i.e. h,i). I want the most concise an clean way to do this. I could do it this way myself:

for x in range(2):
    mylist.pop()
    mylist.pop(0)

Any other alternatives?

Advertisement

Answer

From a performance point of view:

  • mylist = mylist[2:-2] and del mylist[:2];del mylist[-2:] are equivalent
  • they are around 3 times faster than the first solution for _ in range(2): mylist.pop(0); mylist.pop()

Code

iterations = 1000000
print timeit.timeit('''mylist=range(9)nfor _ in range(2): mylist.pop(0); mylist.pop()''', number=iterations)/iterations
print timeit.timeit('''mylist=range(9)nmylist = mylist[2:-2]''', number=iterations)/iterations
print timeit.timeit('''mylist=range(9)ndel mylist[:2];del mylist[-2:]''', number=iterations)/iterations

output

1.07710313797e-06

3.44465017319e-07

3.49956989288e-07

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement