Head and tail in one line Head and tail in one line python python

Head and tail in one line


Under Python 3.x, you can do this nicely:

>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]>>> head1>>> tail[1, 2, 3, 5, 8, 13, 21, 34, 55]

A new feature in 3.x is to use the * operator in unpacking, to mean any extra values. It is described in PEP 3132 - Extended Iterable Unpacking. This also has the advantage of working on any iterable, not just sequences.

It's also really readable.

As described in the PEP, if you want to do the equivalent under 2.x (without potentially making a temporary list), you have to do this:

it = iter(iterable)head, tail = next(it), list(it)

As noted in the comments, this also provides an opportunity to get a default value for head rather than throwing an exception. If you want this behaviour, next() takes an optional second argument with a default value, so next(it, None) would give you None if there was no head element.

Naturally, if you are working on a list, the easiest way without the 3.x syntax is:

head, tail = seq[0], seq[1:]


>>> mylist = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]>>> head, tail = mylist[0], mylist[1:]>>> head1>>> tail[1, 2, 3, 5, 8, 13, 21, 34, 55]


For O(1) complexity of head,tail operation you should use deque however.

Following way:

from collections import dequel = deque([1,2,3,4,5,6,7,8,9])head, tail = l.popleft(), l

It's useful when you must iterate through all elements of the list. For example in naive merging 2 partitions in merge sort.