What is the best way to get all but the last N elements of an iterator in Python? Here is an example of it in theoretical action:
>>> list(all_but_
Based on Ignacio Vazquez-Abrams's description:
from collections import deque
def all_but_the_last_n(iterable, count):
q = deque()
i = iter(iterable)
for n in range(count):
q.append(i.next())
for item in i:
q.append(item)
yield q.popleft()
I wondered whether it was better to use the deque right to left (append, popleft) or left to right (appendleft, pop). So i timed it with python 2.5.2 and found that rtl was 3.59 usec while ltr was 3.53 usec. The difference of 0.06 usec is not significant. the test was to append a single item and pop a single item.