内包表記で組合せ(コンビネーション)を列挙する
Python だと,
>>> a, b = 5, 2
>>> [[a, b] for a in range(5) for b in range(a)]
[[1, 0], [2, 0], [2, 1], [3, 0], [3, 1], [3, 2], [4, 0], [4, 1], [4, 2], [4, 3]]
を得る。
Julia は Python が 0 オリジンなのに対して 1 オリジンなので,以下のようになる。
[[a, b] for a in 1:5 for b in 1:a-1]
10-element Vector{Vector{Int64}}:
[2, 1]
[3, 1]
[3, 2]
[4, 1]
[4, 2]
[4, 3]
[5, 1]
[5, 2]
[5, 3]
[5, 4]
Python と同じ添え字が必要なら,
[[a-1, b-1] for a in 1:5 for b in 1:a-1]
10-element Vector{Vector{Int64}}:
[1, 0]
[2, 0]
[2, 1]
[3, 0]
[3, 1]
[3, 2]
[4, 0]
[4, 1]
[4, 2]
[4, 3]
意味ねえ〜〜〜〜
列挙順序は異なるが,以下のようにも。
using Combinatorics
for i in combinations(1:5, 2)
println(i)
end
[1, 2]
[1, 3]
[1, 4]
[1, 5]
[2, 3]
[2, 4]
[2, 5]
[3, 4]
[3, 5]
[4, 5]
順序を揃えたいなら
using Combinatorics
for i in combinations(1:5, 2)
println([i[2], i[1]])
end
[2, 1]
[3, 1]
[4, 1]
[5, 1]
[3, 2]
[4, 2]
[5, 2]
[4, 3]
[5, 3]
[5, 4]
とか
using Combinatorics
for i in combinations(1:5, 2)
println([i[2]-1, i[1]-1])
end
[1, 0]
[2, 0]
[3, 0]
[4, 0]
[2, 1]
[3, 1]
[4, 1]
[3, 2]
[4, 2]
[4, 3]