2017-06-19 11 views
5

Tôi có một bộ S = {1,2,3}. Tôi đang cố tạo một tuple dạng (i, j, 1) mà i và j là các phần tử của S. Khi S = {1,2,3}, tập hợp các bộ dữ liệu của tôi (nói E) nên là { (1,2,1), (2,1,1), (1,3,1), (3,1,1), (3,2,1), (2,3,1)}. Tôi đã thử theo cách sau.Lập trình Julia - tạo một tuple từ các chỉ mục trong một tập hợp

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

Nhưng nó không cho tôi result.What yêu cầu tôi nhận được là

Bất kỳ [(2,2,1), (2,2,1), false] Bất kỳ [(2,3,1), (3,2,1), đúng] Bất kỳ [(2,1,1), (1,2,1), đúng] Bất kỳ [(3,2,1), (2,3,1), đúng] Bất kỳ [(3,3,1), (3,3,1), sai] Bất kỳ [(3,1,1), (1,3,1), đúng] Bất kỳ [(1,2,1), (2,1,1), đúng] Bất kỳ [(1,3,1), (3,1,1), đúng] Bất kỳ [(1,1,1), (1,1,1), sai]

Ai đó có thể vui lòng giúp tôi nhận kết quả được yêu cầu không?

Trả lời

3

Một giải pháp tổng quát hơn có thể là:

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

Bạn có thể đạt được những gì bạn muốn với một list comprehension: Lưu ý

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

rằng đây mang đến cho bạn một mảng, nhưng sau đó bạn có thể chuyển thông tin này vào một nhà xây dựng đề ra; Hoặc bạn có thể sử dụng một 'generator' trực tiếp:

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

được tôi làm gì sai mặc dù?

này một phần của mã:

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

không làm những gì bạn nghĩ rằng nó. Tôi nghĩ bạn dự định E sẽ được 'khởi tạo' làm đối tượng 'đặt', mà sau đó bạn mong muốn "nối thêm" các phần tử bằng cách "gán" chúng cho E. (cũng có vấn đề tại sao bạn mong đợi một phần tử bình thường để hoạt động như một bài kiểm tra lựa chọn, nhưng bất cứ điều gì).

Nhưng rõ ràng điều này không làm việc, bởi vì mỗi khi bạn gán cái gì đó để E, bạn đang thay thế nội dung trước đó với [một tham chiếu đến] một đối tượng mới.

Nếu bạn muốn tiếp cận này bằng cách cẩn thận 'phụ thêm' yếu tố của bạn mong muốn một-by-one, đây là có thể, nhưng bạn nên thực hiện nó như thế này:

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

(cũng lưu ý 'lồng vòng lặp for' cú pháp đặc biệt julia ở đây)

Các vấn đề liên quan