[英]'TypeError: list indices must be integers, not str' Python 3
[英]TypeError: list indices must be integers, not str (in my code,Python)
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
请帮助我,如果我在列表 'a' 或 'b' 或 'c' 中,那么我将是 'bg'。
首先,您请求input()
,生成一个字符串。 然后你for i in vvod: vvod_a.append(i)
做for i in vvod: vvod_a.append(i)
把这个字符串变成一个 1 个字符的字符串list
(为了将来参考,你可以用vvod_a = list(vvod)
做到这一点)。 这产生了list
: ['f', 'e', 'f', 's', 'f', 'f', 'a', 'a', 'f', 'a', 'e']
. 然后您尝试使用if i == 'a' or 'b' or 'c':
修改其中的一些,但这等效于if (i=='a') or ('b') or ('c')
,并且由于非空字符串为真,因此您会得到一个始终为真的条件。
然后我们进入实际问题: vvod_a[i] = 'bg'
。 您正在迭代list
的实际元素,而不是它的索引。 i
是一个字符串,而不是可用于list
索引的整数。
我建议进行以下最小更改:
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)
如果你想收紧你的代码,你可以在list
理解中结合使用字典和get
方法:
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)
正如 TigerhawkT3 指出的那样,您代码中的两个主要问题是,在for
循环中,您使用列表的实际元素作为索引(第 8 行中的vvod_a[i]
),以及第 7 行中的if
条件无法比较条件左侧的表达式,右侧的每个元素。 作为替代解决方案,我建议使用 enumerate():
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.