Python 范围 len 与枚举

新手上路,请多包涵

我从 范围(len(列表))或枚举(列表)读取? 使用 range(len(s)) 并不是编写 Python 的好方法。如果我们不需要循环 len(s) 次但例如 len(s)//3 次或 len(s)-5 times?是否可以将这些循环转换为使用 enumerate

例如,我有一个项目,其中有一个包含 3n 个元素“s[0]、s[1]、…、s[3n-1]”的列表,我需要将它们打印在 nx3 表中。我写了类似的代码

for i in range(len(s)//3):
    row = str(s[3*i]) + " " + str(s[3*i+1]) + " " + str(s[3*i+2])
    print(row)

原文由 Jaakko Seppälä 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 523
2 个回答

如果您遍历整个列表:

 for x in lst:
    print(x)

如果你遍历整个列表,但你只需要索引:

 for i, _ in enumerate(lst):
    print(i)

如果您遍历整个列表,但不需要索引或数据:

 for _ in lst:
    print("hello")

如果您要遍历列表的一部分:

 for x in lst[:-5]:
    print(x)

等等。

我不确定为什么要遍历列表的 _一部分_,这看起来很奇怪。我很想听听您的用例,因为它可能会得到改进。

查看您现在发布的代码,@Metareven 有一个很好的解决方案 - 以您要处理的大小的块迭代列表。

原文由 Adam Barnes 发布,翻译遵循 CC BY-SA 3.0 许可协议

您的代码看起来还不错,但是如果您想一次迭代 3 个元素,我会创建一个 for 循环,将 i 变量递增 3 而不是一个,如下所示:

 for i in range(0,len(s),3):
  row = str(s[i]) + " " + str(s[i+1]) + " " + str(s[i+2])
  print(row)

原文由 Metareven 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题