TypeError: list indices must be integers, not str Python

前端 未结 5 466
再見小時候
再見小時候 2020-11-30 15:20

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

The following error appears:

TypeError: list indices must be integers, not str

相关标签:
5条回答
  • 2020-11-30 15:29

    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

    0 讨论(0)
  • 2020-11-30 15:31
    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]
    >>> 
    
    0 讨论(0)
  • 2020-11-30 15:39

    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.

    0 讨论(0)
  • 2020-11-30 15:41

    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)]
    
    0 讨论(0)
  • 2020-11-30 15:46

    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.

    0 讨论(0)
提交回复
热议问题