2017-06-19 58 views
5

我有一個集合S = {1,2,3}。我試圖創建一個形式爲(i,j,1)的元組,其中i和j是S的元素。當S = {1,2,3}時,我的元組(例如E)應該是{ (1,2,1),(2,1,1),(1,3,1),(3,1,1),(3,2,1),(2,3,1)}。我嘗試了以下方法。Julia編程 - 從集合中的索引創建元組

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),真]任何[(3,3,1),(3,3,1),假]任何[(3,1,1),(1,3,1),真]任何[(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」對象,然後通過將它們分配給E來「追加」元素。(另外,還有一個問題是爲什麼你期望一個普通元素充當選擇測試,但無論如何)。

但顯然這是不行的,因爲每次你東西分配給E,你與 [對象爲參考]代替以前的內容。

如果你想仔細處理這個「追加」一個接一個你想要的元素,這可能的,但你應該做這樣的:

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

(也注意Julia的特殊的 '嵌套的for循環' 這裏的語法)