TypeError: list indices must be integers, not str Python

list[s] is a string. Why doesn’t this work?

The following error appears:

TypeError: list indices must be integers, not str

list = ['abc', 'def']
map_list = []

for s in list:
  t = (list[s], 1)
  map_list.append(t)

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

When you iterate over a list, the loop variable receives the actual list elements, not their indices. Thus, in your example s is a string (first abc, then def).

It looks like what you’re trying to do is essentially this:

orig_list = ['abc', 'def']
map_list = [(el, 1) for el in orig_list]

This is using a Python construct called list comprehension.

Method 2

Do not use the name list for a list. I have used mylist below.

for s in mylist:
    t = (mylist[s], 1)

for s in mylist: assigns elements of mylist to s i.e s takes the value ‘abc’ in the first iteration and ‘def’ in the second iteration. Thus, s can’t be used as an index in mylist[s].

Instead, simply do:

for s in lists:
    t = (s, 1)
    map_list.append(t)
print map_list
#[('abc', 1), ('def', 1)]

Method 3

list1 = ['abc', 'def']
list2=[]
for t in list1:
    for h in t:
        list2.append(h)
map_list = []        
for x,y in enumerate(list2):
    map_list.append(x)
print (map_list)

Output:

>>> 
[0, 1, 2, 3, 4, 5]
>>>

This is what you want exactly.

If you dont want to reach each element then:

list1 = ['abc', 'def']
map_list=[]
for x,y in enumerate(list1):
    map_list.append(x)
print (map_list)

Output:

>>> 
[0, 1]
>>>

Method 4

it should be:

for s in my_list:     # here s is element  of list not index of list
    t = (s, 1)
    map_list.append(t)

i think you want:

for i,s in enumerate(my_list):  # here i is the index and s is the respective element
    t = (s, i)
    map_list.append(t)

enumerate give index and element

Note: using list as variable name is bad practice. its built in function

Method 5

for s in list will produce the items of the list and not their indexes. So s will be 'abc' for the first loop, and then
'def'. 'abc' could only be a key to a dict, not a list index.

In the line with t fetching the item by index is redundant in python.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x