# Ho to solve: list indices must be integers or slices, not list

Hi guys!
I’ve found this issue:

Here is my code, I have two lists and a list that contains the two lists (my real lists are more complex but I’m trying to simplify them in order to focus on the main problem)

a=[[1,2,3],[1,4,5]]
b=[[3,5,7,8],[4,5,6,2]]
list=[a,b]

for i in list:
for j in list[i]:
…ecc, ecc…

I got this error message:
in line: “for j in list[i]”
list indices must be integers or slices, not list

I also tryed with
for j in range(len(list[i])

but I received the same message

The index is the part within square brackets. So for `list[i]`, your index is `i`. Python is telling you that the index must be an int or a slice, not a list.

In the `for i in list:` line, the variable `i` isn’t set to the place in the list, it’s set to each element in turn. So I suspect you were intending something closer to:

``````for i in list:
for j in i:
...
``````

Thanks.

for i in list:
for j in i:
print(somma[i][j])

but I get the same error message:
in → print(somma[i][j])
TypeError: list indices must be integers or slices, not list

Can you tell me how to solve?

What is somma? Again `i` and `j` are not indices. They are the members of the list. so you can just print the object.

``````for i in list:
for j in i:
print(j)
``````

If you need the index because you’re inspecting some other data structure, you have to loop over a range or an enumerate of the object.

``````for i, sublist in enumerate(list):
for j, item in enumerate(sublist):
print(f"This item is {item} and the other item might be {somma[i][j]}")
``````

I would be helpful to understand what is the objective of the code. What should it accomplish?

It is not good practice to use built-in `list` as name. Down the road something like this could happen:

``````>>> list('abc')
['a', 'b', 'c']
>>> list = [1, 2, 3]
>>> list('abc')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
``````

Thank you! I made a mistake with the indices.
But, now I have another issue: is it possible to get the name of the list a specific sublist comes from?

For example:

a=[[1,2,3],[1,4,5]]
b=[[3,5,7,8],[4,5,6,2]]
c=[[3,4,7],[9,0,4]]
list1=[a,b,c]

for i in list1:
for j in i:

I have to get, at a specific step of the loop, what is the list (a,b or c) a specific item comes from.
For example, if the algorithm gives me [4,5,6,2], I expect → ‘b’

You might want to look into `dict`s.

``````lists_of_lists = {
'a': [[1,2,3], [1,4,5]],
'b': [[8,6,5], []]
}
for lists_name, lists in lists_of_lists.items():
# do something with the name/key
for sublist in lists:
# and so on
``````