web-dev-qa-db-fra.com

TypeError: les index de la liste doivent être des entiers et non des str Python

list[s] est une chaîne. Pourquoi ça ne marche pas? 

L'erreur suivante apparaît: 

TypeError: les index de la liste doivent être des entiers et non des str 

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

for s in list:
  t = (list[s], 1)
  map_list.append(t)
10
kerschi
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)

Sortie:

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

C'est ce que tu veux exactement.

Si vous ne voulez pas atteindre chaque élément, alors:

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

Sortie:

>>> 
[0, 1]
>>> 
2
GLHF

Lorsque vous parcourez une liste, la variable de boucle reçoit les éléments de la liste, et non leurs index. Ainsi, dans votre exemple, s est une chaîne (d'abord abc, puis def).

Cela ressemble à ce que vous essayez de faire est essentiellement ceci:

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

Ceci utilise une construction Python appelée list comprehension .

11
NPE

N'utilisez pas le nom list pour une liste. J'ai utilisé mylist ci-dessous.

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

for s in mylist: assigne des éléments de mylist à s i.e s prend la valeur 'abc' dans la première itération et 'def' dans la deuxième itération. Ainsi, s ne peut pas être utilisé comme index dans mylist[s].

Au lieu de cela, faites simplement:

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

cA devrait etre:

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

je pense que tu veux:

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 donne l'index et l'élément

Remarque: utiliser list comme nom de variable est une mauvaise pratique. sa fonction intégrée

2
Hackaholic

for s in list produira les éléments de la liste et non leurs index. Donc, s sera 'abc' pour la première boucle, puis 'def'. 'abc' ne peut être qu'une clé d'un dict, pas un index de liste.

Dans la ligne avec t, récupérer l'élément par index est redondant en python.

0
Danny Staple