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