python - 当使用 for 循环遍历列表时,为什么“for x in range(len(spam)) 有效但“for x in spam”无效?
问题描述
来自 JS,使用 for 循环遍历列表确实可以按我的预期工作。
spam = ['bat', 'nap', 'hat']
for x in spam:
print(spam[x])
打印错误文件“”,第 2 行,在 print(spam[x]) TypeError: list indices must be integers or slices, not str
尽管
for x in range(len(spam)):
print(spam[x])
打印出来
bat
nap
hat
我现在了解如何迭代列表,但我不完全确定它的逻辑。为什么
range(len(spam))
打印正确的结果?根据我的理解,在这种情况下,len(spam) 只是返回一个整数值 (3),然后简化为 range(3)?
也许我只是回答了我自己的问题——但这是因为 python 现在知道用 spam[x] 迭代垃圾邮件多少次了吗?
解决方案
当你有
spam = ['bat', 'nap', 'crap']
for x in spam:
print(spam[x])
...在您要求的循环的第一次迭代中,print spam['bat']
这没有任何意义。
In the version that works, it's expanded to for x in range(3)
, in which the first iteration would be print spam[0]
which is correct.
if you want the index, use enumerate
, otherwise just print x
in your original code.
for i, entry in enumerate(spam):
print spam[i]
# or just "print entry"
推荐阅读
- php - 使用 html 表单复选框从 php 显示数组
- html - 使用 sed 从 html 中提取 pdf
- python - Pygame 对象移动
- opencv - IP摄像头不断丢帧
- python - 将目标依赖项添加到 Xcode 项目的 Bash 命令/Python 脚本
- javascript - 如何设置工厂函数来实现它在 Typescript 中生成的类的参数调用签名?
- matrix - 从 mlogit 收集 z 统计信息时,矩阵有意外丢失的单元格
- python - 类型错误:JSON 对象必须是 str,而不是 Jupyter 笔记本上的“字节”
- javascript - 在不实例化新对象的情况下设置值
- regex - REGEX_MATCH 模式适用于任何地方,但 Google Data Studio