Why do I keep getting “TypeError: ‘int’ object is not iterable”?
Here’s what I’ve got:
def double_index(lst, index):
if index >= len(lst):
return lst
else:
new_lst = lst[:index] + list(2*lst[index]) + lst[index+1:]
return new_lst
I’m very confused because it seems almost identical to the official solution. What’s wrong with my code and what does this error actually mean?
First, please use the </> icon in the menu bar atop the text box to format your code. Doesn’t this look better?
def double_index(lst, index):
if index >= len(lst):
return lst
else:
new_lst = lst[:index] + list(2*lst[index]) + lst[index+1:]
return new_lst
Now, look at this expression:
lst[:index] + list(2*lst[index]) + lst[index+1:]
The second term is list(2*lst[index])
, and looking inside of that we see 2*lst[index]
, which is
2 * list element at index
, an int if this is a list of integers.
So that second term is list(some_int)
, which raises the TypeError,
‘int’ object is not iterable
… since the list() function (actually, type) is designed to take as its parameter an iterable.
1 Like