首页 > 解决方案 > 当使用 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] 迭代垃圾邮件多少次了吗?

标签: pythonloops

解决方案


当你有

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"

推荐阅读