Sous Python 3.x, vous pouvez le faire très bien:
>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
Une nouvelle fonctionnalité de 3.x consiste à utiliser l' *
opérateur lors du déballage, pour signifier toute valeur supplémentaire. Il est décrit dans PEP 3132 - Déballage itérable étendu . Cela a également l'avantage de travailler sur n'importe quel itérable, pas seulement des séquences.
C'est aussi très lisible.
Comme décrit dans le PEP, si vous voulez faire l'équivalent sous 2.x (sans potentiellement faire une liste temporaire), vous devez faire ceci:
it = iter(iterable)
head, tail = next(it), list(it)
Comme indiqué dans les commentaires, cela offre également la possibilité d'obtenir une valeur par défaut pour head
plutôt que de lancer une exception. Si vous voulez ce comportement, next()
prend un deuxième argument optionnel avec une valeur par défaut, donc next(it, None)
vous donnerait None
s'il n'y avait pas d'élément head.
Naturellement, si vous travaillez sur une liste, le moyen le plus simple sans la syntaxe 3.x est:
head, tail = seq[0], seq[1:]