在 Julia 中构建遍历多个索引的数组
Build array iterating over multiple indices in Julia
我想用更优雅的语法得到如下结果
julia> collect(Iterators.flatten([[(x,y) for y in 1:x] for x in 1:3]))
6-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
(3, 3)
我尝试了类似 [(x,y) for y in 1:x, x in 1:3]
的方法,但我得到了 ERROR: UndefVarError: x not defined
。
像这样颠倒变量的顺序:
julia> [(x,y) for x in 1:3 for y in 1:x]
6-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
(3, 3)
我以前也一直在努力记住变量顺序。直到有一天有人告诉我一个秘密:只要把for
循环在列表推导中的顺序照常处理,只是把body移到了前面。
例如,在正常顺序中我们写:
for x in 1:3
for y in 1:x
# do sth
end
end
现在我们将 body 部分移到前面,我们有 [ #= do sth =# for x in 1:3 for y in 1:x]
我想用更优雅的语法得到如下结果
julia> collect(Iterators.flatten([[(x,y) for y in 1:x] for x in 1:3]))
6-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
(3, 3)
我尝试了类似 [(x,y) for y in 1:x, x in 1:3]
的方法,但我得到了 ERROR: UndefVarError: x not defined
。
像这样颠倒变量的顺序:
julia> [(x,y) for x in 1:3 for y in 1:x]
6-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
(3, 3)
我以前也一直在努力记住变量顺序。直到有一天有人告诉我一个秘密:只要把for
循环在列表推导中的顺序照常处理,只是把body移到了前面。
例如,在正常顺序中我们写:
for x in 1:3
for y in 1:x
# do sth
end
end
现在我们将 body 部分移到前面,我们有 [ #= do sth =# for x in 1:3 for y in 1:x]