web-dev-qa-db-fra.com

Façon pythonique de diviser une liste en premier et de se reposer?

Je pense qu'en Python 3 je pourrai faire:

first, *rest = l

c'est exactement ce que je veux, mais j'utilise 2.6. Pour l'instant je fais:

first = l[0]
rest = l[1:]

C'est bien, mais je me demandais simplement s'il y avait quelque chose de plus élégant.

55
Shawn
first, rest = l[0], l[1:]

Fondamentalement, la même chose, sauf qu'il s'agit d'un oneliner. Roches d'assignation de tuple.

C'est un peu plus long et moins évident, mais généralisé pour tous les itérables (au lieu de se limiter aux tranches):

i = iter(l)
first = next(i) # i.next() in older versions
rest = list(i)
37
user395760

Tu peux faire

first = l.pop(0)

puis l sera le reste. Cependant, cela modifie votre liste d'origine, alors ce n'est peut-être pas ce que vous voulez.

Encore une autre, en travaillant avec python 2.7. Utilisez simplement une fonction intermédiaire. Logique car le nouveau comportement imite ce qui s'est passé pour le passage des paramètres de fonctions.

li = [1, 2, 3]
first, rest = (lambda x, *y: (x, y))(*li)
0
kriss