109 votes

tête et queue de python en une ligne

Existe-t-il un moyen pythonique de décompresser une liste dans le premier élément et le "tail" en une seule commande?

Par exemple:

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

228voto

Lattyware Points 37257

Sous Python 3.x, vous pouvez le faire 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 est l'utilisation de l' * opérateur au déballage, à la moyenne de toutes les valeurs supplémentaires. Il est décrit dans le PEP 3132 - Étendue Itérable Déballage. Cela a aussi l'avantage de travailler sur n'importe quel itérable, et pas seulement des séquences.

C'est aussi vraiment lisible.

Comme décrit dans le PEP, si vous voulez faire l'équivalent de moins de 2.x (sans risquer de faire une liste temporaire), vous devez faire ceci:

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

Naturellement, si vous travaillez sur une liste, le moyen le plus facile sans le 3.x la syntaxe est:

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

38voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X