2014-12-27 3 views
10

list[s] - это строка. Почему это не работает?ТипError: индексы индексов должны быть целыми, а не str Python

появляется следующее сообщение об ошибке:

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) 
+19

пожалуйста, не используйте список в качестве имени, это тень питона встроенного – Anzel

ответ

2
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) 

Выход:

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

Это то, что вы хотите точно.

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) 

Выход:

+27

я downvoted, потому что это не объясняет, почему исходный код не работа или где ошибка в понимании ОП была. – SethMMorton

1

должно быть:

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

я думаю, что вы хотите:

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 дают индекс и элемент

Примечание: использование списка в качестве имени переменной является плохой практикой. его встроенная функция

5

Не используйте имя list для списка. Я использовал mylist ниже.

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

for s in mylist: присваивает элементы mylist к ss т.е. принимает значение «ABC» в первой итерации и «размораживание» во второй итерации. Таким образом, s не может использоваться в качестве индекса в mylist[s].

Вместо этого просто сделать:

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

Когда вы итерацию по списку, переменная цикла принимает фактические элементы списка, а не их индексы. Таким образом, в вашем примере s есть строка (первая abc, затем def).

Похоже, что вы пытаетесь сделать, это в основном это:

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

Это использует Python конструкцию, называемую list comprehension.

0

for s in list будет производить элементы списка, а не их индексы. Таким образом, s будет 'abc' для первого контура, а затем 'def'. 'abc' может быть только ключом к dict, а не индексом списка.

В строке с t выборкой элемента по индексу является избыточным в python.

Смежные вопросы