2012-03-15 20 views
14
k = [u'query_urls', u'"kick"', u'"00"', u'msg=1212', u'id=11'] 

>>> name, view, id, tokens = k 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 

Necesito proporcionar 5 variables para descomprimir esta lista. ¿Hay alguna manera de desempaquetar con menos, de modo que tokens obtenga el resto de la lista? No quiero escribir otra línea para agregar a una lista ...¿Cómo desempaquetar una lista con menos variables?

Gracias.


Por supuesto que puedo cortar una lista, asignar individualmente, etc, pero quiero saber cómo hacer lo que quiera usando la sintaxis anterior.

+1

¿Quieres hacer caso omiso de la resto de los valores? – anijhaw

+0

@anijhaw no i dont. el resto de la lista debe asignarse a los tokens – User007

Respuesta

26

En Python 3 se puede hacer esto: (edit: esto se llama extended iterable unpacking)

name, view, id, *tokens = k 

En Python 2, que tendrá que hacer esto:

(name, view, id), tokens = k[:3], k[3:] 
+1

Gracias. No es de extrañar por qué no puedo hacer '* tokens' solo en Py3. Gracias. Ese método de corte se ve muy bien. Bueno, nunca pensé que podríamos hacer eso en una sola línea. Sin embargo, me da este 'ValueError: necesito más de 2 valores para descomprimir'. Estoy en 2.6.5 – User007

+1

[PEP 3132] (http://www.python.org/dev/peps/pep-3132/) describe el desempaquetado iterativo extendido en Python 3. – agf

+0

Haha. El paréntesis hace el truco. Gracias, y @agf gracias! – User007

Cuestiones relacionadas