【问题标题】:skip iterations in for loop in python?在python的for循环中跳过迭代?
【发布时间】:2016-07-02 19:32:14
【问题描述】:

我之前用 C++ 编程过,但我是 Python 新手。我搜索了这个,但我找不到合适的答案。在 C++ 中,我可以这样做:

for(int i=0; i<10;i++)
{
   i+=5;
   std::cout<<i<<std::endl
}

i 的值是 5 和 11。但在 python 中如果我这样做:

for i in range(0,10):
   i+=5
   print i

i 的值确实会在该循环的迭代中更新,但在下一次迭代中,它将变为 1。 虽然我明白在 python 中,每次迭代后,我都会在 range 生成的元组/列表中包含下一个值,但是有什么方法可以让它像在 C++ 中一样跳过迭代?我真的不想使用 next() 函数 5 次

编辑:我可以将 range 函数的第三个参数用于一般用途,但是如果我想跳过一些迭代以说明是否只有某个条件为真。例如

for(int i=0; i<10;i++)
{
   if(i%2)i+=1;
   std::cout<<i<<std::endl
}

【问题讨论】:

  • 你可能想使用range第三个参数来指定步长。如果这不适合您,请考虑使用常规的 while 循环。
  • 在 Python 中执行此操作的最佳方法取决于您为什么要跳过 5 次迭代。您不会真正编写像您的 C++ 示例那样的代码。有时,玩具的简化会掩盖真正的主题。

标签: python c++ for-loop


【解决方案1】:

如果您想在条件为真时跳过迭代,请使用continue

for i in range(10):
    if i % 2:
        continue
    print(i)

【讨论】:

  • 问题并不是关于使用 continue 作为解决方案。这是关于根据 if 条件更改循环迭代。 if (someCondition) {change the value of i to something else}
  • @Nav 问题是“如果我想跳过一些迭代怎么办”
【解决方案2】:

您可以使用常规的while 循环。它看起来不那么漂亮,但它可以完成工作。 例如:

i = 0
while i < 100:
    print i
    if i % 2 == 0:
        i += 5
    i+=1

【讨论】:

    【解决方案3】:

    我知道你在想什么,但是 python 内置了一些东西,可以让你在 range() 函数中设置迭代步骤。 Hererange() 上的官方 Python 文档。

    本质上,要在每次迭代后跳过x,您会这样做:

    for i in range(start, stop, x + 1):
        # functions and stuff
    

    希望这会有所帮助。

    【讨论】:

    • 但是,它不是通用的。只有当您不断跳过时,它才会起作用。如果您必须跳过 3 和 2 的倍数怎么办?
    • @hashcode55 这就是使用内置的缺点。请参阅 Ned Batchelder 的解决方案,了解解决问题的区分大小写的方法。
    猜你喜欢
    • 2021-08-23
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多