【问题标题】:Julia programming - creating a tuple from indices in a setJulia 编程 - 从集合中的索引创建元组
【发布时间】:2017-06-19 08:02:43
【问题描述】:

我有一个集合 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

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

任意[(2,2,1),(2,2,1),false]任意[(2,3,1),(3,2,1),true]任意[(2,1, 1),(1,2,1),true]Any[(3,2,1),(2,3,1),true]Any[(3,3,1),(3,3,1) ,false]Any[(3,1,1),(1,3,1),true]Any[(1,2,1),(2,1,1),true]Any[(1,3, 1),(3,1,1),true]任意[(1,1,1),(1,1,1),false]

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

【问题讨论】:

    标签: tuples julia


    【解决方案1】:

    您可以通过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时,你都会用[a reference to]一个替换它以前的内容> 对象。

    如果您想通过小心地将所需元素逐个“附加”来解决此问题,这可能的,但您应该这样做:

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

    (还要注意 julia 的特殊“嵌套 for 循环”语法)

    【讨论】:

      【解决方案2】:

      更通用的解决方案可能是:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        相关资源
        最近更新 更多