在 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
Not
是 InvertedIndices
包的一部分,但也通过 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)
在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
Not
是 InvertedIndices
包的一部分,但也通过 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)