venta tamaño precio piton nominal mojave maximo bola blanca amarilla adulta python list tail head

python - tamaño - cabeza y cola de pitón en una línea



piton bola tamaño maximo (4)

¿Hay alguna forma pitónica de descomprimir una lista en el primer elemento y la "cola" en un solo comando?

Por ejemplo:

>> 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]


En Python 3.x, puedes hacer esto muy 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]

Una nueva característica en 3.x es usar el operador * para desempaquetar, para significar cualquier valor adicional. Se describe en PEP 3132 - Desempaquetado Iterable Extendido . Esto también tiene la ventaja de trabajar en cualquier secuencia iterable, no solo.

También es muy legible.

Como se describe en el PEP, si desea hacer el equivalente en 2.x (sin tener que hacer una lista temporal), debe hacer esto:

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

Naturalmente, si está trabajando en una lista, la forma más sencilla sin la sintaxis 3.x es:

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


Para O (1) complejidad de la head,tail operación de la head,tail debe usar deque sin embargo.

Siguiente manera:

from collections import deque l = deque([1,2,3,4,5,6,7,8,9]) head, tail = l.popleft(), l

Es útil cuando debe recorrer todos los elementos de la lista. Por ejemplo, en una combinación ingenua de 2 particiones en tipo de combinación.


Python 2, usando lambda

>>> head, tail = (lambda lst: (lst[0], lst[1:]))([1, 1, 2, 3, 5, 8, 13, 21, 34, 55]) >>> head 1 >>> tail [1, 2, 3, 5, 8, 13, 21, 34, 55]


>>> 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]