list[s]
是一个字符串。为什么这不起作用?
出现以下错误:
TypeError:list indices必须是整数,而不是str
list = ['abc', 'def']
map_list = []
for s in list:
t = (list[s], 1)
map_list.append(t)
答案 0 :(得分:11)
当迭代列表时,循环变量接收实际的列表元素,而不是它们的索引。因此,在您的示例中,s
是一个字符串(第一个abc
,然后是def
)。
看起来你正在尝试做的事情基本上是这样的:
orig_list = ['abc', 'def']
map_list = [(el, 1) for el in orig_list]
这是使用名为list comprehension的Python结构。
答案 1 :(得分:5)
不要将名称list
用于列表。我在下面使用了mylist
。
for s in mylist:
t = (mylist[s], 1)
for s in mylist:
将mylist
的元素分配给s
,即s
在第一次迭代中取值'abc',在第二次迭代中取'def'。因此,s
不能将mylist[s]
用作索引。
相反,只需:
for s in lists:
t = (s, 1)
map_list.append(t)
print map_list
#[('abc', 1), ('def', 1)]
答案 2 :(得分:2)
它应该是:
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
给出索引和元素
注意:使用list作为变量名是不好的做法。它的内置功能
答案 3 :(得分: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]
>>>
这正是你想要的。
如果你不想到达每个元素,那么:
list1 = ['abc', 'def']
map_list=[]
for x,y in enumerate(list1):
map_list.append(x)
print (map_list)
输出:
>>>
[0, 1]
>>>
答案 4 :(得分:0)
for s in list
将生成列表中的项目而不是其索引。因此s
对于第一个循环将是'abc'
,然后是。{1}}
'def'
。 'abc'
只能是dict的关键,而不是列表索引。
在t
的行中,按索引获取项目在python中是多余的。