通过递归实现多列表遍历组合
- 法一
参考: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)