kunaguvarun kunaguvarun - 2 months ago 11
Python Question

ValueError: need more than 0 values to unpack (python lists)

I'm learning python from Google code class. I'm trying out the exercises.

def front_x(words):
x_list, ord_list = []
for word in words:
if word[0] == 'x':
x_list.append(word)
else:
ord_list.append(word)
return sorted(x_list) + sorted(ord_list)


I believe the error is thrown because of initializing two empty lists on a single line. If if initialize them on separate lines, no more errors occur. Is this the reason?

Answer

You are trying to use tuple assignment:

x_list, ord_list = []

you probably meant to use multiple assignment:

x_list = ord_list = []

which will not do what you expect it to; use the following instead:

x_list, ord_list = [], []

or, best still:

x_list = []
ord_list = []

When using a comma-separated list of variable names, Python expects there to be a sequence of expressions on the right-hand side that matches the number variables; the following would be legal too:

two_lists = ([], [])
x_list, ord_list = two_lists

This is called tuple unpacking. If, on the other hand, you tried to use multiple assignment with one empty list literal (x_list = ord_list = []) then both x_list and ord_list would be pointing to the same list and any changes made through one variable will be visible on the other variable:

>>> x_list = ord_list = []
>>> x_list.append(1)
>>> x_list
[1]
>>> ord_list
[1]

Better keep things crystal clear and use two separate assignments, giving each variable their own empty list.

Comments