2012-03-15 7 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 

Devo fornire 5 variabili per decomprimere questo elenco. C'è un modo per decomprimere con meno, in modo che tokens ottiene il resto della lista. Non voglio scrivere un'altra riga da aggiungere a un elenco ....Come si decomprime un elenco con un numero inferiore di variabili?

Grazie.


Certo che posso tagliare un elenco, assegnare individualmente, ecc Ma io voglio sapere come fare ciò che voglio utilizzando la sintassi sopra.

+1

Vuoi ignorare il resto dei valori? – anijhaw

+0

@anijhaw no io non. il resto della lista deve essere assegnato ai token – User007

risposta

26

In Python 3 si può fare questo: (edit: questo è chiamato extended iterable unpacking)

name, view, id, *tokens = k 

In Python 2, si dovrà fare questo:

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

Grazie. Non c'è da stupirsi perché non riesco a fare '* token 'è solo in Py3. Grazie. Questo metodo di slice sembra davvero buono. Beh, non avrei mai saputo che avremmo potuto farlo in una sola riga. Tuttavia, mi dà questo valore di ValueError: servono più di 2 valori per decomprimere. Sono in 2.6.5 – User007

+1

[PEP 3132] (http://www.python.org/dev/peps/pep-3132/) descrizioni estese iterable decompressione in Python 3. – agf

+0

Haha. La parentesi fa il trucco. Grazie, e @agf grazie! – User007

Problemi correlati