2017-04-09 7 views
2

forループのヘッダ行で以下を解凍できない理由を理解できていません。以下は私与えるのでPythonで `for`ループ文を使用してシーケンス構造体を展開する

>>> (a,b),c = (1,2),3 
>>> a 
1 
>>> b 
2 
>>> c 
3 

は、私は、これは私がエラーを受け取りますないとき?:

for (a,b),c in [(1,2),3]: 
... print(a,b,c) 

私は、それが働いて取得する方法を知っています理由:ことを考えると

目的の結果:

>>> for (a,b),c in [((1,2),3)]: 
... print(a,b,c) 
1 2 3 

なぜ、余分な括弧が0のヘッダー行に囲んでいるのでしょうかこの出力を得るにはループが必要ですか?

任意のシーケンスをアンパックすることができるとすれば、[(1,2), 3]はリストシーケンスとして構文的に正しいので、理論上はターゲット変数(a,b),cに割り当てることができます。それでなぜこれは当てはまりませんか?そして、なぜ私は追加のかっこでシーケンスを囲む必要がありますか?

これに関するいくつかの明確さは非常に認められるでしょう。

答えて

4

ループはリストエントリを反復しているため、最初に(1,2)(a,b),cに割り当てようとすると機能しません。余分なカッコを追加すると、(1,2),3が、forループが初めて繰り返されるときに(a,b),cに割り当てる単一のリストエントリ((1,2),3)であるタプルに変換されます。

試してみてください。

for v in [(1,2),3]: 
    print v 

そして、あなたはvが、その後3(1,2)が割り当てられていることがわかります。

+0

明確かつ簡潔な答えです、ありがとうございます! – seeker

関連する問題