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

このリストを展開するには、5つの変数を指定する必要があります。少ない数で解凍する方法があるので、tokensが残りのリストを取得します。私はリストに追加するために別の行を書こうとしません....より少ない変数でリストを展開するにはどうすればよいですか?

ありがとう。


もちろん私はなど、個別に割り当て、リストをスライスすることができますしかし、私は、私は上記の構文を使用してやりたい方法を知りたいです。

+1

はあなたが無視したいですか残りの価値? – anijhaw

+0

@anijhawいいえ、私はいません。残りのリストはトークンに割り当てる必要があります – User007

答えて

26

のPython 3ではこれを行うことができます(編集は:これはextended iterable unpackingと呼ばれている)

name, view, id, *tokens = k 

をPythonの2では、あなたはこれを行う必要があります。

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

ありがとうございます。どうして私が 'トークン 'をできないのか、それはPy3でしかないのです。ありがとう。そのスライス方法は本当に良く見えます。まあ、私はそれを1行で行うことはできませんでした。しかし、それは私にこの「ValueError:解凍するために2つ以上の値が必要」を与えます。私は2.6.5である – User007

+1

[PEP 3132](http://www.python.org/dev/peps/pep-3132/)は、Python 3で拡張されたiterableのアンパックを記述しています。 – agf

+0

Haha。カッコはそのトリックを行います。ありがとう、そして@ agfありがとう! – User007

関連する問題