在 Julia 中,如何在 for 循环中跳过某些数字

In Julia, how to skip certain numbers in a for loop

在julia for循环中,我想跳过可以被500整除的数字。例如,在下面的循环中,我想跳过 i=500, 1000, 1500, 2000, 2500, .. ., 10000. 我该怎么做?

n=10000
result = zeros(n)
for i = 1:n
  result[i] = i
end

只需使用 continue:

for i = 1:n
  iszero(i%500) && continue
  result[i] = i
end

虽然@jing 的回答是完全正确的,但有时您有一个您想要实际跳过的值列表。在这种情况下 Not 可能是一个优雅的解决方案:

julia> skipvals = [2,4,5];

julia> for i in (1:7)[Not(skipvals)]
       print("$i ")
       end
1 3 6 7

NotInvertedIndices 包的一部分,但也通过 DataFrames 一起导入,所以在大多数数据科学代码中它只是供你使用:)

continue 更有效的选择是使用 Iterators.filter 创建一个惰性迭代器来过滤不需要的值。

对于 OP 中给出的示例,这将是:

n=10000
result = zeros(n)
iter = Iterators.filter(i -> (i % 500) != 0, 1:n)
for i = iter
  result[i] = i
end

与@jling 的答案比较的基准:

julia> @btime for i = 1:n
         iszero(i%500) && continue
         result[i] = i
       end
  1.693 ms (28979 allocations: 609.06 KiB)

julia> @btime for i = iter
         result[i] = i
       end
  1.177 ms (28920 allocations: 607.81 KiB)