在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循环的顺序,只需将主体移到前面。

例如,在正常顺序中,我们写:

for x in 1:3
for y in 1:x
# do sth
end
end

现在我们把身体部分移到前面,我们有了[ #= do sth =# for x in 1:3 for y in 1:x]

相关内容

  • 没有找到相关文章

最新更新