Julia编程 - 从集合中的索引创建元组

ccc*_*ccc 4 tuples julia

我有一套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)}.我尝试了以下方式.

    for i in S
      for j in S
        E = Set()
        E = [(i,j,1),(j,i,1), i!=j]
        print(E)
      end
    end
Run Code Online (Sandbox Code Playgroud)

但它没有给我所需的结果.我得到的是

任何[(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),假]

有人可以帮助我获得所需的结果吗?

Tas*_*nou 6

您可以通过列表理解实现您想要的目标:

[(i,j,1) for i in S for j in S if i != j]
Run Code Online (Sandbox Code Playgroud)

请注意,这会为您提供一个数组,但您可以将其传递给一个set构造函数; 或者你可以直接使用' 发电机 ':

Set( (i,j,1) for i in S for j in S if i != j )
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

这部分代码:

E = Set()
E = [(i,j,1),(j,i,1), i!=j]
Run Code Online (Sandbox Code Playgroud)

不会做你认为它做的事情.我认为你打算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
Run Code Online (Sandbox Code Playgroud)

(另请注意julia的特殊'嵌套for循环'语法)