
aaron roberts
2,003 Pointsunpacking question.
can anyone tell me why this code doesn't run interms of unpacking?
def league(*teams):
team1, team2, team3 = teams
print(team1)
prem = ["arsenal", "chelsea", "liverpool"]
league(prem)
'ValueError: not enough values to unpack (expected 3, got 1)' is what is return but considering there is 3 strings in the list i don't understand what the problem is?
2 Answers

AJ Tran
Treehouse TeacherHi aaron roberts !
prem = ["arsenal", "chelsea", "liverpool"]
league(prem)
# => ValueError: not enough values to unpack (expected 3, got 1)
prem
counts as one value, since it is one list!
The notation you'll want is:
league('arsenal', 'chelsea', 'liverpool')
# => arsenal
Try this out and see :)

aaron roberts
2,003 Pointsthanks! i think i just covered this in one of the courses, so the * in the argument counts towards there being more values?

Alexis Othonos
3,108 PointsThe asterisk (*) works only on iterables.
So if you know that what you are passing is a list, tuple, etc. then you can safely add the asterisk to unpack the values.
Try with print function
prem = ["arsenal", "chelsea", "liverpool"]
teams = 3
# pass list as a single element, therefore the list as an element will be printed:
print(prem)
# ['arsenal', 'chelsea', 'liverpool']
# pass list arguments individually by unpacking. The print function can automatically handle multiple arguments
print(*prem)
# arsenal chelsea liverpool
# unpack non iterable value in function:
print(*teams)
# TypeError
Hope this helps
aaron roberts
2,003 Pointsaaron roberts
2,003 PointsThanks!
Alexis Othonos
3,108 PointsAlexis Othonos
3,108 PointsOr you can unpack the list before passing it as an argument:
AJ Tran
Treehouse TeacherAJ Tran
Treehouse TeacherAlexis Othonos, you're a real MVP! aaron roberts, make sure you see this other answer!!