在嵌套for循环

时间:2018-04-09 14:20:13

标签: python

我想将6的所有排列写入4的块中。当我执行打印(模板)时,它实际上打印了所需的排列: Permutations work fine as seen on the image

然而,当我将它们附加到big_template并打印big_template(我想要包含所有排列的列表)时,所有打印的都是[6,6,6,6]的列表。

Big_template is not as expected

这是我的代码:

template = ['' for i in range(4)]
big_template = []
j=0
for i in range(1,7):
    template[j]=i
    for i in range(1,7):
        template[j+1]=i
        for i in range(1,7):
            template[j+2]=i
            for i in range(1,7):
                template[j+3]=i
                print(template)
                big_template.append(template)
print(big_template)

我的问题是我做错了什么。此外,我想将此过程扩展到任何数字框中的6的排列。通过我的方法,我将拥有尽可能多的循环作为框中的条目。如何使用递归函数来完成?

干杯。

1 个答案:

答案 0 :(得分:0)

考虑使用itertools中的方法,例如permutation

在您的示例中,big_template的每个元素都是同一个对象template,您可以使用is operator看到。

print(big_template[0] is template)
print(big_template[0] is big_template[1])

都会产生True。这解释了为什么big_template仅包含[6,6,6,6],这是template占用的最后一个值。

有关此主题的更多信息,请参阅Python initializing a list of lists

要使代码按原样运行,您应致电copybig_template.append(template.copy())

但你真的应该使用排列。