如何在 Julia 中实现递减 for 循环?

Bil*_*uly 3 loops for-loop decrement julia

我知道python我可以做以下事情。

for i in range(10, 0, -1):
    print(i)
Run Code Online (Sandbox Code Playgroud)

这将输出:

10
9
8
7
6
5
4
3
2
1 
Run Code Online (Sandbox Code Playgroud)

我很陌生julia,我知道我可以按如下方式创建普通循环。

for i=1:10
    println(i)
end
Run Code Online (Sandbox Code Playgroud)

直觉上,我尝试了如下(因为我认为它的行为类似于 python 的range([start], stop[, step])函数)。

for i=10:1:-1
    println(i)
end
Run Code Online (Sandbox Code Playgroud)

虽然它没有失败,但它也没有打印任何东西。我究竟做错了什么?

是否有一种直观的方法可以向后循环julia

Bog*_*ski 8

尝试这个:

julia> for i=10:-1:1
           println(i)
       end
10
9
8
7
6
5
4
3
2
1
Run Code Online (Sandbox Code Playgroud)

或这个

julia> for i=reverse(1:10)
           println(i)
       end
10
9
8
7
6
5
4
3
2
1
Run Code Online (Sandbox Code Playgroud)

正如@phipsgabler 指出的,您还可以使用:

julia> range(10, 1, step=-1)
10:-1:1
Run Code Online (Sandbox Code Playgroud)

再次获得相同的结果(请注意,您必须将其1用作第二个索引)。

从我的实践来看range,使用length关键字参数通常更有用:

julia> range(10, 1, length=10)
10.0:-1.0:1.0
Run Code Online (Sandbox Code Playgroud)

(请注意,在这种情况下,您会得到一个Float64not向量Int

  • 另请注意,范围的“reverse”是有效的。如果你写“reverse(1:10)”,你只会得到“10:-1:1”结果。 (2认同)
  • 或者 `range(10, 0, step=-1)`,以接近 Python 语法。 (2认同)
  • 我已经更新了答案。感谢您的评论(只需注意“range”中的“1”而不是“0”作为第二个参数) (2认同)