我想用更优雅的语法获得以下结果
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]