Python遍历列表报错TypeError:列表索引必须为整数或切片而非字符串
报错核心原因
两种遍历写法的循环变量拿到的值完全不一样:
- 第一种
for i in range(len(li))写法中,i是range生成的从0开始的连续整数,正好对应列表的合法下标,所以li[i]的写法符合Python列表「索引必须是整数/切片」的要求,可以正常运行。 - 第二种
for words in li是Python里遍历列表的更简洁写法,循环变量words拿到的直接是列表里存储的元素本身,也就是'this'/'is'这类字符串,根本不是下标。此时写li[words]等价于写li['this'],用字符串给列表做索引自然会触发类型报错。
你尝试用int()强转words没用的原因也很简单:这些words是纯英文字符串,不是数字格式的文本,根本没法转成整数,就算强行转也会抛ValueError,本质是逻辑搞错了——你在直接遍历元素的场景下,本来就不需要再通过索引去取元素。
正确写法
根据你的需求选对应写法即可:
- 只需要遍历输出所有元素:直接打印循环拿到的元素即可,不需要额外索引访问
li = ['this', 'is', 'an', 'example', 'list'] for words in li: print(words)
- 遍历过程中需要同时拿到元素和它对应的整数下标:用内置的
enumerate()函数,比range(len(li))的写法更符合Python编码规范
li = ['this', 'is', 'an', 'example', 'list'] for index, words in enumerate(li): print(f"第{index}个位置的元素是:{words}")
内容的提问来源于stack exchange,提问作者Ari Rosen
相关产品推荐
相关产品推荐

