2017-06-19 14 views
5

S = {1,2,3} kümem var. Ben, i ve j'nin S'nin elemanları olduğu bir formun (i, j, 1) bir tuple oluşturmaya çalışıyorum. S = {1,2,3} olduğunda, tuples setim (E olsun) olmalıdır. { (1,2,1), (2,1,1), (1,3,1), (3,1,1), (3.2.1), (2,3,1)}. Aşağıdaki şekilde denedim.Julia programlama - bir kümedeki dizinlerden bir tuple oluşturma

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

Ama bana alıyorum gerekli result.What vermez ise

Herhangi [(2,2,1), (2,2,1), yanlış] [doğru (2,1,1), (1,2,1),] Herhangi [doğru (2,3,1), (3.2.1),] herhangi bir herhangi bir [(3,2,1), (2,3,1) doğru] herhangi bir [(3,3,1), (3,3,1), yanlış] herhangi bir [(3,1,1), (1,3,1) doğru] [doğru (1,3,1), (3,1,1),] Herhangi [doğru (1,2,1), (2,1,1),] herhangi bir herhangi bir [(1,1,1), (1,1,1), sahte]

biri bana gerekli sonucu elde etmek için yardım eder misiniz?

cevap

3

daha genel bir çözüm olabilir:

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

Sen bir list comprehension ile istediğinizi elde edebilirsiniz: Bu size bir dizi verir

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

Not ama sonra bir dizi yapıcı üzerine bu geçebilir; Alternatif olarak, doğrudan bir 'generator' kullanabilirsiniz: Yanlış düşünmüşüm ne yapıyordu

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

?

Kodun bu bölümü:

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

Eğer öyle düşündüğün yapmaz. Bence, 'set' nesnesi olarak 'örneklenecek' bir nesne olarak 'örneklenecek' bir amaç için E'u planladığınızı düşünüyorum. Daha sonra, bunları elemanlara "atamak" suretiyle "eklemeye" beklediniz (aynı zamanda, normal bir öğeyi neden beklediğinizi de görebilirsiniz). Bir seçim testi olarak hareket eder, ama her neyse). Eğer E için şey atamak her zaman çünkü

Ama açıkça bu işe yaramazsa

, bir yeni nesneye [referansı] ile önceki içeriğini değiştiriyoruz. Eğer tek-birer istediğiniz unsurları 'ekleyerek' dikkatle tarafından bu yaklaşmak istiyorsa

, bu mümkündür, ancak böyle yapmalıydık:

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

(ayrıca not burada julia'in özel 'iç içe döngü' sözdizimi)