代码之家  ›  专栏  ›  技术社区  ›  shantanuo

在不改变顺序的情况下查找组合

  •  -2
  • shantanuo  · 技术社区  · 4 年前

    我试图在不改变顺序的情况下从这个列表生成排列。

    mylist = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i"]]
    

    预期结果:

    acegi
    bcehi
    acfgi
    bcfhi
    adegi
    bdehi
    adfgi
    bdfhi
    acegi
    bcehi
    acfgi
    bcfhi
    adegi
    bdehi
    adfgi
    bdfhi
    

    此代码按预期工作。但我想知道还有没有别的办法。

    for f in range(2):
        for s in range(2):
            for t in range(2):
                for f in range(2):
                    print(
                        mylist[0][f]
                        + mylist[1][s]
                        + mylist[2][t]
                        + mylist[3][f]
                        + mylist[4][0]
                    )
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   j1-lee    4 年前

    你可以用 itertools.product :

    import itertools
    
    mylist = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i"]]
    
    for p in itertools.product(*mylist):
        print(''.join(p))
    
    # acegi
    # acehi
    # acfgi
    # acfhi
    # adegi
    # adehi
    # adfgi
    # adfhi
    # bcegi
    # bcehi
    # bcfgi
    # bcfhi
    # bdegi
    # bdehi
    # bdfgi
    # bdfhi
    
    推荐文章