Julia-访问for循环中的两个元素

Julia-访问for循环中的两个元素,julia,Julia,在julia中循环通过for循环时,获取两个相邻元素的快速方法是什么 如果我有 z = linspace(1, 10, 9) for i in z[1:length(z)-1] println(i, " ") end 我能以某种方式获得两个元素I和下一个元素I+1 是的,这是可能的。由于它很常见,因此在Iterators.jl中定义了一个专门的迭代器,用于执行此类任务。其他特殊迭代器也非常有用(根据个人经验),值得研究 using Iterators # may have to Pkg

julia
中循环通过for循环时,获取两个相邻元素的快速方法是什么

如果我有

z = linspace(1, 10, 9)
for i in z[1:length(z)-1]
    println(i, " ")
end

我能以某种方式获得两个元素
I
和下一个元素
I+1

是的,这是可能的。由于它很常见,因此在
Iterators.jl
中定义了一个专门的迭代器,用于执行此类任务。其他特殊迭代器也非常有用(根据个人经验),值得研究

using Iterators # may have to Pkg.add("Iterators") first

z = linspace(1,10,9)
for (v1,v2) in partition(z,2,1)
    @show v1,v2
end
partition
的参数
2,1
是元组的大小和步长。

参考Julia,Julia中的一般
循环:

for i = I   # or  "for i in I"
    # body
end
转换为
结构:

state = start(I)
while !done(I, state)
    (i, state) = next(I, state)
    # body
end
因此,使用相同的语法,可以简单地实现自定义高效循环,例如,在每次迭代中提取两个相邻元素的以下循环:

I=linspace(1, 10, 9)
state = start(I)
while !done(I, state)
  (i, state) = next(I, state) # 
  (j, _)     = next(I, state) # extract next element without update state
  println(i,' ',j)
end
#= >
1.0 2.125
2.125 3.25
3.25 4.375
4.375 5.5
5.5 6.625
6.625 7.75
7.75 8.875
8.875 10.0
10.0 11.125
< =#
I=linspace(1,10,9)
状态=开始(I)
虽然完成(I,州)
(i,state)=下一个(i,state)#
(j,_)=下一个(I,状态)#在不更新状态的情况下提取下一个元素
println(i,,,j)
结束
#= >
1.0 2.125
2.125 3.25
3.25 4.375
4.375 5.5
5.5 6.625
6.625 7.75
7.75 8.875
8.875 10.0
10.0 11.125
< =#
我非常喜欢
reduce()

其思想是让函数留下第二个值,以便它可以用作下一对的第一个值

如果使用
foldr()
并返回第一个值,则可以返回:

julia> foldr((x, y) -> (println("$x + $y = $(x+y)"); x), z)
9.0 + 10.0 = 19.0
8.0 + 9.0 = 17.0
7.0 + 8.0 = 15.0
6.0 + 7.0 = 13.0
5.0 + 6.0 = 11.0
4.0 + 5.0 = 9.0
3.0 + 4.0 = 7.0
2.0 + 3.0 = 5.0
1.0 + 2.0 = 3.0
1.0

顺便说一句,StackOverflow只是让我通过验证码来证明我是人类。坦率地说,如果机器人能够回答这些问题,那么也许是时候永远挂起靴子了。
julia> foldr((x, y) -> (println("$x + $y = $(x+y)"); x), z)
9.0 + 10.0 = 19.0
8.0 + 9.0 = 17.0
7.0 + 8.0 = 15.0
6.0 + 7.0 = 13.0
5.0 + 6.0 = 11.0
4.0 + 5.0 = 9.0
3.0 + 4.0 = 7.0
2.0 + 3.0 = 5.0
1.0 + 2.0 = 3.0
1.0