代码之家  ›  专栏  ›  技术社区  ›  Tomasz Przemski

两个列表值之间的选定组合

  •  1
  • Tomasz Przemski  · 技术社区  · 7 年前

    我有两份清单 a b . 然后,我尝试在列表的值之间找到所有三个元素的组合,并且只找到其中包含列表中的值的元素组合 b . 目前,我的做法如下:

    import itertools as it
    
    a = [1,2,3,4]
    b = [5,6]
    
    for i in range(len(b)):
        a.append(b[i])
    
    c = []              
    for j in it.combinations(a, 3):
        if 5 in j or 6 in j:
           c.append(list(j))
    
    # output:
    # [[1, 2, 5], [1, 2, 6], [1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [1, 5, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6], [2, 5, 6], [3, 4, 5], [3, 4, 6], [3, 5, 6], [4, 5, 6]]
    

    不幸的是,对于大型列表,这是一种无效的方法,因为列表中存在元素的条件 b 位于具有功能的回路后面 it.combinations ,在这样的系统中,无论条件如何,都会完全执行。在大列表的情况下,会严重超载计算。

    是否有可能以不同的方式获得这样的结果?

    1 回复  |  直到 7 年前
        1
  •  1
  •   h_wyrwiczerep    7 年前

    怎么样:

    import itertools as it
    
    a = [1,2,3,4]
    b = [5,6]
    
    c = []
    for i in range(1,3):
        for j in it.combinations(b,i):
            for k in it.combinations(a,3-i):
               c.append(j+k)