【问题标题】:Skipping an iteration in for loop在 for 循环中跳过迭代
【发布时间】:2026-01-01 02:50:02
【问题描述】:

有没有一种有效的方法可以跳过 for 循环中的迭代?

我有一个包含标准普尔 500 指数期权价格的大型数据集。数据集的范围从 1992 年到 2009 年。现在,我总共有 3481 个引用日期存储在某个向量中,我称之为 QDvector。我只对从 2008 年到 2009 年的报价日期感兴趣。对于每个报价日期,我运行一个特定的程序。感兴趣的报价日期是从 3290 到 3481。但是,在某些特殊情况下(很少),由于缺少库存数据,该程序无法运行。如何在 for 循环中跳过这些迭代?

例如,假设我有

for index = 3290:3481
    [...]
end 

并假设我不想考虑index == 3389。如何跳过此迭代?

  • 我可以使用while循环,但我真的不想考虑这个索引,因为我还必须绘制某些参数并且我想跳过与index == 3389对应的参数。
  • 我可以从QDvector 中删除报价日期。我不喜欢这种方法,因为我还必须更改太多其他变量。

我只是在寻找一种跳过某些迭代而不会产生任何后果的好方法。

【问题讨论】:

    标签: matlab loops for-loop iteration


    【解决方案1】:

    是的,continue 语句允许这样做。

    for index = 3290:3481
        [...]
        continue;    % wherever applicable
    end
    

    【讨论】:

      【解决方案2】:

      检查索引并在找不到时执行您的代码。

      for index = 3290:3481
          if index != 3389
              [...]
          end
      end
      

      如果没有 else 语句,当语句为 false 时什么都不会发生,有效地跳过索引。

      或者:

      for index = 3290:3481
          if index == 3389
              continue
          else
              [...]
          end
      end
      

      效率稍低,因为检查将运行,并且在大多数情况下,会进行到 else。但是只有 191 次传球,可能不会引起注意。

      【讨论】:

      • 你不需要else,继续会跳过循环体的其余部分
      • 查看here进行性能比较