2017-06-19 5 views
5

私は集合S = {1,2,3}を持っています。私は、iとjがSの要素である(i、j、1)という形のタプルを作成しようとしています。S = {1,2,3}のとき、タプルのセット(E)は{ (1,2,1)、(2,1,1)、(1,3,1)、(3,1,1)、(3,2,1)、(2,3,1)}である。私は次のようにしてみました。ジュリアプログラミング - 集合のインデックスからタプルを作成する

for i in S 
     for j in S 
     E = Set() 
     E = [(i,j,1),(j,i,1), i!=j] 
     print(E) 
     end 
    end 

しかし、それは私が取得しています必要なresult.Whatが

どれ[(2,2,1)、(2,2,1)、偽]である私を与えるものではありません任意の[(2,3,1)、(3,2,1)、真]任意の[(2,1,1)、(1,2,1)、真]任意の[(3,2,1)、 (2,3,1)、true] Any [(3,3,1)、(3,3,1)、false] Any [(3,1,1)、(1,3,1)、true]任意の[(1,2,1)、(2,1,1)、真]任意の[(1,3,1)、(3,1,1)、真]任意の[(1,1,1)、 (1,1,1)、false]

誰かが必要な結果を得るのを手伝ってもらえますか?

答えて

3

より一般的な解決策は次のようになります。

julia> [(first(i)..., last(i)...) for i in Base.product(permutations(1:4, 3), [(5,6)])] 
24×1 Array{Tuple{Int64,Int64,Int64,Int64,Int64},2}: 
(1,2,3,5,6) 
(1,2,4,5,6) 
(1,3,2,5,6) 
(1,3,4,5,6) 
(1,4,2,5,6) 
(1,4,3,5,6) 
(2,1,3,5,6) 
(2,1,4,5,6) 
(2,3,1,5,6) 
(2,3,4,5,6) 
(2,4,1,5,6) 
(2,4,3,5,6) 
(3,1,2,5,6) 
(3,1,4,5,6) 
(3,2,1,5,6) 
(3,2,4,5,6) 
(3,4,1,5,6) 
(3,4,2,5,6) 
(4,1,2,5,6) 
(4,1,3,5,6) 
(4,2,1,5,6) 
(4,2,3,5,6) 
(4,3,1,5,6) 
(4,3,2,5,6) 
7

あなたがlist comprehensionで欲しいものを達成することができます:これはあなたの配列を与えること

[(i,j,1) for i in S for j in S if i != j] 

ますが、あなたがして、設定されたコンストラクタにこれを渡すことができます。別の方法としては、直接 'generator' を使用することができます:私は間違って何をしていた

Set((i,j,1) for i in S for j in S if i != j) 

コードのこの部分:

E = Set() 
E = [(i,j,1),(j,i,1), i!=j] 

は、あなたはそれがないと思う何をしません。私はEを 'set'オブジェクトとして 'インスタンス化'しようとしていると思っていました.Elementにそれらを "割り当て"て "追加"することを期待していました。選択テストとして動作しますが、何でも)。

しかし、あなたはEに何かを割り当てるたびに、あなたは新しいオブジェクト[参照]して、以前の内容を置き換えているので、明らかにこれは、動作しません。

ご希望の要素を一つずつ「を付加」慎重にすることによって、これをアプローチしたい場合は、このが可能ですが、あなたはこのようにそれを行っている必要があります:(

E = Set() 
for i in S, j in S 
    if i != j 
    push!(E, (i,j,1), (j,i,1)); 
    end 
end 

も注意してくださいここでのジュリアの特別な「ネストされたループのための」構文が)

関連する問題