Sotto Python 3.x, è possibile farlo bene:
>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
Una nuova funzionalità di 3.x è quello di utilizzare l'operatore *
in disimballaggio, a significa qualsiasi valore extra. È descritto in PEP 3132 - Extended Iterable Unpacking. Questo ha anche il vantaggio di lavorare su qualsiasi sequenza iterabile, non solo.
È anche veramente leggibile.
Come descritto nella PEP, se si vuole fare l'equivalente sotto 2.x (senza potenzialmente fare un elenco provvisorio), si hanno a che fare questo:
it = iter(iterable)
head = it.next()
tail = list(it)
Naturalmente, se si sta lavorando un elenco, il modo più semplice, senza la sintassi 3.x è:
head, tail = seq[0], seq[1:]
Ricordare che gli elenchi non sono implementati come elenchi a collegamento singolo in Python, quindi questa operazione è costosa (come in: l'intera lista deve essere copiata). A seconda di ciò che si vuole raggiungere, questo potrebbe o potrebbe non essere un problema. Sto solo citando questo perché questo tipo di elenco di destrutturazione si trova spesso nei linguaggi funzionali, dove è in realtà un'operazione molto economica. –