No Python 3.x, você pode fazer isso muito bem:
>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
Um novo recurso no 3.x é usar o *
operador na descompactação, para significar quaisquer valores extras. É descrito em PEP 3132 - Desempacotamento Iterável Estendido . Isso também tem a vantagem de trabalhar em qualquer iterável, não apenas em sequências.
Também é muito legível.
Conforme descrito no PEP, se você quiser fazer o equivalente em 2.x (sem potencialmente fazer uma lista temporária), você deve fazer o seguinte:
it = iter(iterable)
head, tail = next(it), list(it)
Conforme observado nos comentários, isso também fornece uma oportunidade de obter um valor padrão para, em head
vez de lançar uma exceção. Se você deseja este comportamento, next()
recebe um segundo argumento opcional com um valor padrão, então next(it, None)
forneceria None
se não houvesse elemento head.
Naturalmente, se você estiver trabalhando em uma lista, a maneira mais fácil sem a sintaxe 3.x é:
head, tail = seq[0], seq[1:]