通过递归实现多列表遍历组合

  1. 法一

参考:python 多个数组内数据之间的组合_你若安好我便天晴的博客-CSDN博客_python多个数组排列组合

a = [1, 2, 3, 4, 6]
b = [12, 13, 14, 15, 16]
c = [22, 23, 24, 25, 26]
d = ['a', 'b']
A = [a, b, c, d]


def getPlans(lis, jude=True):
    """
    函数内递归的作用,向内递归,实际为寻找最后一个从集的过程,同时每次向内递归时,将遇到的各从集内第一个值添加到lis[0][i]
    找到最后一个从集时,返回一个结果,开始向外递归,此时会触发elif中的for j循环,从最后的从集开始遍历各具体值,添加到lis[0][1]中
    最后,从倒数第二个从集开始,遍历从集内各值,遍历完即解除一层递归,回到上层递归,再从从集第二个值开始重复上面步骤
    :param lis:
    :param jude:
    :return:
    """
    if jude:
        lis = [[[i] for i in lis[0]]] + lis[1:]    # 第一次执行时,对内部第一个一维数组改造为二维数组[[[1], [2]...],[12,13].. ](设二维数组为主集,后续一维数组为从集),后续方便在最内层添加值
    if len(lis) > 2:    # 每次递归时,会往后切片一次,长度一直缩短
        for i in lis[0]:    # 从二位数组(主集)取值,例:i=[1],递归中时:i=[1, 12]
            for j in lis[1]:    # 从从集中取值,每次递归lis[1]位置都会往后挪一位(以最初的lis参考)
                getPlans([[i + [j]]] + lis[2:], False)  # 将j改造加入lis[0][i]: [[[1, 12],[2]...]...],lis[2:]为剩余从集。
    elif len(lis) == 2:     # 最后只剩一个从集
        for i in lis[0]:
            for j in lis[1]:
                print(i + [j])


getPlans(A)

 

posted @ 2022-09-17 18:51  TGZZ  阅读(146)  评论(0)    收藏  举报