【问题标题】:How to Create Combination of Element in Different Set?如何创建不同集合中元素的组合?
【发布时间】:2016-12-21 09:42:26
【问题描述】:

假设我有 n 个列表并且它们不是不相交的。我想从我拥有的每个列表中得到一个 n 元素的每一种组合,但是在这种组合中,有不同的元素并且没有双重组合。因此,[1,1,2] 是不允许的,[1,2,3][2,1,3] 相同。

例如,我有A=[1,2,3]B=[2,4,1]C=[1,5,3]。所以,我想要的输出是[[1,2,5],[1,2,3],[1,4,5],[1,4,3],[2,4,1],[2,4,5],[2,4,3],[3,2,5],[3,4,5],[3,1,5]]

我有搜索谷歌,我认为模块itertools 中的函数itertools 可以做到。但是,我不知道如何在每个组合中都不要制作相同的元素,也不要制作双重组合。

【问题讨论】:

    标签: python python-2.7 cartesian-product


    【解决方案1】:

    可能是这样的:

    from itertools import product                                               
    A=[1,2,3]
    B=[2,4,1]
    C=[1,5,3]
    L = list(set([ tuple(sorted(l)) for l in product(A,B,C) if len(set(l))==3 ]))
    

    当然,如果您使用 3 个以上的列表,则必须更改 3 的相关值。

    【讨论】:

    • 有些组合包含双元素,例如(1,2,1),我不希望这样。
    • 现在可以正常工作了。非常感谢你!这就是我想要的。
    • 对了,sorted的目的是什么?
    • @fahadh4ilyas sorted(l) 将对每个组合进行排序,从而将(2,4,1) 映射到(1,2,4) 允许以后丢弃带有set 的重复项。
    • @fahadh4ilyas 尝试类似:product(*A) 问候。
    【解决方案2】:

    这个怎么样?创建一个以排序排列为键的字典。仅当所有三个整数都不同时才接受值:

    from itertools import product
    A=[1,2,3]
    B=[2,4,1]
    C=[1,5,3]
    
    LEN = 3
    
    dct = {tuple(sorted(item)): item for item in product(A,B,C) 
           if len(set(item)) == LEN}
    
    print(dct)
    vals = list(dct.values())
    print(vals)
    

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 1970-01-01
      • 2012-09-20
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 2017-01-30
      相关资源
      最近更新 更多