1. ホーム
  2. python

forループにおけるタプルのアンパッキング

2023-09-25 09:05:52

質問

以下のコードを偶然見つけました。

for i, a in enumerate(attributes):
   labels.append(Label(root, text = a, justify = LEFT).grid(sticky = W))
   e = Entry(root)
   e.grid(column=1, row=i)
   entries.append(e)
   entries[i].insert(INSERT,"text to insert")

を理解できません。 i, a のビットが理解できず、google で for の情報をグーグルで検索するのは面倒です。このコードでエクスペリエンスしようとすると、エラーが発生します。

ValueError: 解凍するために1つ以上の値が必要です。

これが何をするものなのか、あるいはもっと詳しく知るためにググればわかるような、より具体的な用語がわかる方はいらっしゃいませんか?

どのように解決するのですか?

あなたは、グーグル タプルアンパッキングで検索してみてください。 . これはPythonの様々な場所で使用することができます。 最もシンプルなのは代入です。

>>> x = (1,2)
>>> a, b = x
>>> a
1
>>> b
2

for-loopでも同様に動作します。イテラブルの各要素が tuple である場合、2つの変数を指定すると、ループ内の各要素はその2つに展開されます。

>>> x = [(1,2), (3,4), (5,6)]
>>> for item in x:
...     print "A tuple", item
A tuple (1, 2)
A tuple (3, 4)
A tuple (5, 6)
>>> for a, b in x:
...     print "First", a, "then", b
First 1 then 2
First 3 then 4
First 5 then 6

enumerate 関数はタプルの反復表を作成するので、このように使用することができます。