78

次のコードに出くわしました:

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: アンパックするには複数の値が必要です

それが何をするのか、またはグーグルで詳細を知ることができるそれに関連するより具体的な用語を知っている人はいますか?

4

8 に答える 8

143

"tuple unpacking"をグーグルで検索できます。これは、Python のさまざまな場所で使用できます。最も単純なのは代入です:

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

for ループでも同様に機能します。iterable の各要素が a の場合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関数は反復可能なタプルを作成するため、このように使用できます。

于 2012-06-03T04:27:54.160 に答える
24

Enumerate は基本的に、for ループで操作するインデックスを提供します。そう:

for i,a in enumerate([4, 5, 6, 7]):
    print i, ": ", a

印刷します:

0: 4
1: 5
2: 6
3: 7
于 2012-06-03T04:29:13.017 に答える
6

例として、次のコードを取り上げます。

elements = ['a', 'b', 'c', 'd', 'e']
index = 0

for element in elements:
  print element, index
  index += 1

リストをループして、インデックス変数も格納します。enumerate()同じことを行いますが、より簡潔に:

elements = ['a', 'b', 'c', 'd', 'e']

for index, element in enumerate(elements):
  print element, index

2 つの異なる変数にアンパックされたタプル ( 、 、 ...) を返すため、index, element表記が必要です。enumerate(1, 'a')(2, 'b')

于 2012-06-03T04:29:25.077 に答える
6
[i for i in enumerate(['a','b','c'])]

結果:

[(0, 'a'), (1, 'b'), (2, 'c')]
于 2012-06-03T07:11:28.553 に答える
2

このenumerate関数はジェネレーターオブジェクトを返し、各反復で要素のインデックスを含むタプルをi生成します0(生成されたタプルに変数名を割り当てます。afor

于 2012-06-03T04:28:56.963 に答える