W Pythonie 3.x możesz to ładnie zrobić:
>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
Nowością w 3.x jest użycie *
operatora podczas rozpakowywania, co oznacza wszelkie dodatkowe wartości. Jest to opisane w PEP 3132 - Extended Iterable Unpacking . Ma to również tę zaletę, że pracuje nad dowolnymi iterowalnymi, nie tylko sekwencjami.
Jest też bardzo czytelny.
Jak opisano w PEP, jeśli chcesz zrobić odpowiednik w wersji 2.x (bez potencjalnie tworzenia tymczasowej listy), musisz to zrobić:
it = iter(iterable)
head, tail = next(it), list(it)
Jak zauważono w komentarzach, daje to również możliwość uzyskania wartości domyślnej head
zamiast zgłaszania wyjątku. Jeśli chcesz tego zachowania, next()
pobiera opcjonalny drugi argument z wartością domyślną, więc next(it, None)
dałby ci, None
gdyby nie było elementu head.
Oczywiście, jeśli pracujesz nad listą, najłatwiejszym sposobem bez składni 3.x jest:
head, tail = seq[0], seq[1:]