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