TypeError:列表索引必须是整数,而不是str(在我的代码中,是Python)
请帮帮我,如果我在列表“a”或“b”或“c”中,那么我将是“bg”。首先,你要求输入,生成一个字符串。然后在vvod:vvod_a.appendi中为i执行操作。若要将此字符串转换为1个字符的字符串列表以供将来参考,可以使用vvod_a=listvvod执行此操作。这就产生了一个列表:[f',e',f',s',f',f',a',a',f',a',e']。然后尝试用if i='a'或'b'或'c'修改其中一些,但这相当于if i=='a'或'b'或'c',并且由于非空字符串是真实的,因此得到的条件总是真实的 然后我们进入实际问题:vvod_a[i]=“bg”。您正在迭代列表中的实际元素,而不是其索引。i是一个字符串,而不是可用于列表索引的整数 我建议进行以下最小改动:TypeError:列表索引必须是整数,而不是str(在我的代码中,是Python),python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,请帮帮我,如果我在列表“a”或“b”或“c”中,那么我将是“bg”。首先,你要求输入,生成一个字符串。然后在vvod:vvod_a.appendi中为i执行操作。若要将此字符串转换为1个字符的字符串列表以供将来参考,可以使用vvod_a=listvvod执行此操作。这就产生了一个列表:[f',e',f',s',f',f',a',a',f',a',e']。然后尝试用if i='a'或'b'或'c'修改其中一些,但这相当于if i=='a'或'b'或'c',并且由于非空字符串是真实的,因此得到的条件
vvod = input('Input: ')
vvod_a = []
for i in vvod:
vvod_a.append(i)
print (vvod_a)
for i in vvod_a:
if i == 'a' or 'b' or 'c':
vvod_a[i] = 'bg'
print (vvod_a)
Traceback (most recent call last):
['f', 'e', 'f', 's', 'f', 'f', 'a', 'a', 'f', 'a', 'e']
File "/home/n4/Рабочий Влад/PYTHON/coding", line 8, in <module>
vvod_a[i] = 'bg'
TypeError: list indices must be integers, not str
如果要收紧代码,可以在列表中使用字典和get方法:
vvod = input('Input: ')
vvod_a = []
for i in vvod:
vvod_a.append(i)
print (vvod_a)
for i in range(len(vvod_a)):
if vvod_a[i] in 'abc':
vvod_a[i] = 'bg'
print (vvod_a)
正如TigerhawkT3所指出的,代码中的两个主要问题是,在for循环中,您使用列表的实际元素作为第8行中的索引vvod_a[i],而第7行中的if条件无法将条件左侧的表达式与右侧的每个元素进行比较。作为替代解决方案,我建议使用enumerate:
vvod = input('Input: ')
change_map = {'a':'bg', 'b':'bg', 'c':'bg'}
vvod_a = [change_map.get(item, item) for item in vvod]
print(vvod_a)
vvod = input('Input: ')
vvod_a = []
for i in vvod:
vvod_a.append(i)
print (vvod_a)
for index, i in enumerate(vvod_a):
if i == 'a' or i == 'b' or i == 'c':
print(i)
vvod_a[index] = 'bg'
print(vvod_a)
print (vvod_a)