0

for ループで split を使用すると、上記の例外が発生します。しかし、for ループから独立した要素を取得すると、次のように機能します。

>>> for k,v in x.split("="):
...   print k,v
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> y =  x.split("=")
>>> y
['abc', 'asflskfjla']
>>> k,v = y
>>> k
'abc'
>>> v
'asflskfjla'

説明をいただければ幸いです。また、当然のことながら、for ループ バージョンの適切な構文も示してください。

4

3 に答える 3

7

forループは、イテラブル内の各項目が 2 つの変数にアンパックできることを想定しています。したがって、あなたの場合、次のいずれかのようになります。

[('a, b'), ('c, d'), ...]
[['a, b'], ['c, d'], ...]
['ab', 'cd', ...]
...

kこれらの iterable のそれぞれの項目は、とvコンポーネントに分割できます。あなたの場合、の出力はx.split('=')3文字以上の文字列のリストであるため、できません。

['abc', 'asflskfjla']
于 2013-05-18T02:38:04.053 に答える
3

x.split変数からわかるように、文字列のリストを返しますy。それを繰り返すと、リストの最初の要素を取り、'abc'それを tuple にバインドしようとしk, vます。文字列はシーケンス型であるため、要求されたタプルに文字列の文字を割り当てようとします。実際には、2 要素のタプルに展開するには値 (3 文字) が多すぎます。

于 2013-05-18T02:38:15.953 に答える
0

この動作が必要な場合s.split()は、リストにラップするだけです:

>>> for (k,v) in [s.split("=")]:
    print(k,v)  
('abc', 'asflskfjla')
于 2013-05-18T03:06:14.377 に答える