TypeError:列表索引必须是整数,而不是str Python



list[s]是一个字符串。为什么这不起作用?

出现以下错误:

类型错误:列表索引必须是整数,而不是 str

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

循环访问列表时,循环变量接收实际的列表元素,而不是它们的索引。因此,在您的示例中,s是一个字符串(首先是abc,然后是def)。

看起来您要做的基本上是这样的:

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

这是使用一种称为列表推导的Python结构。

不要将名称list用于列表。我在下面使用了mylist

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

for s in mylist:mylist元素分配给ss在第一次迭代中取值"abc",在第二次迭代中取值"def"。因此,s不能用作 mylist[s] 中的索引。

相反,只需执行以下操作:

for s in lists:
    t = (s, 1)
    map_list.append(t)
print map_list
#[('abc', 1), ('def', 1)]
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]
>>> 

这正是您想要的。

如果您不想访问每个元素,则:

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

输出:

>>> 
[0, 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给出索引和元素

注意:使用列表作为变量名称是不习惯的。 它的内置函数

for s in list将生成列表中的项目,而不是它们的索引。因此,s将在第一个循环中'abc',然后 'def' . 'abc'只能是字典的关键,而不是列表索引。

在 python 中,按索引获取项目是多余的t行。

相关内容

  • 没有找到相关文章

最新更新