python - 无法以递归方式更新列表

时间:2017-08-09 06:35:53

标签: python recursion except

我使用递归来获得某些元素的组合。

当indexerror出现时我得到组合。(除了:部分)

a = ['a1', 'a2', 'a3'], b = ['b1', 'b2'], c = ['c1', 'c2', 'c3']

我希望得到可能的组合

[['a1', 'b1', 'c1'],['a1', 'b1', 'c2'],['a1', 'b1', 'c3'],['a1', 'b2', 'c1'],['a1', 'b2', 'c2'],['a1', 'b2', 'c3'],['a2', 'b1', 'c1'],['a2', 'b1', 'c2'],['a2', 'b1', 'c3'],['a2', 'b2', 'c1'],['a2', 'b2', 'c2'],['a2', 'b2', 'c3'],['a3', 'b1', 'c1'],
['a3', 'b1', 'c2'],['a3', 'b1', 'c3'],['a3', 'b2', 'c1'],['a3', 'b2', 'c2'],['a3', 'b2', 'c3']]

然而,结果不是我想要的。

[['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3']]

只有最后一个组合出来。

这是我的代码..我会感谢你向我展示正确的方法。

a = ['a1', 'a2', 'a3']
b = ['b1', 'b2']
c = ['c1', 'c2', 'c3']

def loop(lst, combi, combi_set, index=0):
    try:
        for a in lst[index]:
            if len(combi) == len(lst):
                for n, i in enumerate(combi):
                    if i.startswith(a[0]):
                        combi[n] = a
            else:
                combi.append(a)

            loop(lst, combi, combi_set, index=index + 1)

    except IndexError:
        print(combi)
        combi_set.append(combi)
        return

set = []
loop([a, b, c], [], set, 0)
print(set)

1 个答案:

答案 0 :(得分:-1)

导入itertools

i = [['a1','a2','a3'],['b1','b2'],['c1','c2','c3']]

打印列表(itertools.product(* i))