kunaguvarun
kunaguvarun

Reputation: 711

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?

Upvotes: 22

Views: 64496

Answers (3)

RICHA AGGARWAL
RICHA AGGARWAL

Reputation: 163

return type of function does not match with values expected in function...

check the number of variables returned from function and variables you are expecting

Upvotes: 0

Martijn Pieters
Martijn Pieters

Reputation: 1121924

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.

Upvotes: 38

Abhijit
Abhijit

Reputation: 63737

Change the line

x_list, ord_list = []

to

x_list, ord_list = [], []

Upvotes: 5

Related Questions