Search code examples
pythonpython-3.xtuplesiterable-unpacking

How are tuples unpacked in for loops?


I stumbled across the following code:

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 don't understand the i, a bit, and searching for information on for didn't yield any useful results. When I try and experiment with the code I get the error:

ValueError: need more than 1 value to unpack

Does anyone know what it does, or a more specific term associated with it that I can google to learn more?


Solution

  • You could google "tuple unpacking". This can be used in various places in Python. The simplest is in assignment:

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

    In a for-loop it works similarly. If each element of the iterable is a tuple, then you can specify two variables, and each element in the loop will be unpacked to the two.

    >>> 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
    

    The enumerate function creates an iterable of tuples, so it can be used this way.