如果满足条件,则在当前迭代步骤结束时退出循环

时间:2014-08-12 12:20:27

标签: matlab loops for-loop octave

我遇到的一个常见问题如下:

在一个循环(通常是for循环)中,一些约束 - 并且必须在开始时检查。现在有时如果条件满足,循环中的代码应该运行到当前迭代步骤的末尾,然后退出

通常我会以某种方式这样做

a = 0;
quit = 0;

for i = 1:1:11
  if (a == 5)    % Condition to be checked *before* the calculation
    quit = 1;    % Stop loop after this iteration
  end

  a = a + 1;     % Calculation
  ...

  if (quit == 1)
    break;
  end
end

但是在紧密的循环中,检查if (quit == 1)的额外条件可能会导致相关的减速。还需要引入一个额外的变量,所以我想知道这通常是怎么做的,或者是否有更好的方法来做...

4 个答案:

答案 0 :(得分:0)

为什么不这样做。

for i = 1:1:11
  if (a == 5)    % Condition to be checked *before* the calculation
    func()  --> do all the calculations
    break;    % Stop loop after this iteration
  else 
    func()   --> do all calculations
  end
end

function func()
 a = a+1
 //all other calculations
end

答案 1 :(得分:0)

通常您可以检测何时停止迭代。但是,如果我理解你的问题,你只能检测它应该是最后一次迭代的时间。你可以试试这个:

a = 0;
i = 1;
while (i<=11)
    if (a == 5)
        i = 12;    % Make sure this is the last iteration
    else
        i = i + 1;
    end

    a = a + 1;
end

答案 2 :(得分:0)

怎么样:

for i = 1:11
    quit = (a==5); % Condition to be checked *before* the calculation
    a = a+1
    if quit
        break;     % Stop loop after this iteration
    end
end

有什么不同吗?

答案 3 :(得分:0)

results = [
    x+y for x, _, y in zip(*(int(x) for x in map(lambda x: x.split(','), fn))
]