Python for循环打印带索引元素触发TypeError报错排查
报错产生原因
直接遍历字符串时,循环变量拿到的是每个字符本身,不是字符对应的整数索引。
你的代码中for x in name的执行逻辑是逐次把"Shyam"里的'S'、'h'、'y'、'a'、'm'赋值给x,x全程是字符串类型。当你写name[x]时,相当于用字符串值当索引去取字符串内容,而Python明确要求字符串的索引必须是整数,因此抛出TypeError: string indices must be integers错误。
错误逻辑拆解
原代码第一次循环就会触发报错:
- 进入循环,x被赋值为第一个字符'S'
- 执行
name[x]等价于执行name['S'] - 索引类型不符合要求,直接抛出类型错误
带索引遍历的正确写法
方法1:使用enumerate()(推荐写法)
enumerate()是Python内置的遍历工具,可以同时返回元素的索引和元素值,代码最简洁:
name = "Shyam" # idx存索引,char存当前位置的字符 for idx, char in enumerate(name): print(idx, "th position elements are : ", char)
如果需要位置从1开始计数,只需要加start参数即可:for idx, char in enumerate(name, start=1)
方法2:通过range()生成索引序列
如果习惯按索引取值的逻辑,可以先获取字符串长度,生成从0开始的整数索引序列再遍历:
name = "Shyam" for idx in range(len(name)): print(idx, "th position elements are : ", name[idx])
注意:Python中所有有序序列(字符串、列表、元组等)的默认索引都是从0开始计数。
内容的提问来源于stack exchange,提问作者Ajay Kumar Gupta
相关产品推荐
相关产品推荐

