结果差异的原因是什么?

时间:2014-12-26 13:58:39

标签: python algorithm debugging

我写了一个python程序来打印数字1 ... 9的奇数排列。

list1=[1,2,3,4,5,6,7,8,9] #this is used to generate permutations in lexicographic order
l3=[] #list to store odd permutations
k=7 # initial value of k
l3.append(list1)

while k!=-1:
    l=0
    #find value of l
    for x in range(len(list1)-1,k,-1):
         if list1[x]>list1[k]:
            l=x 
            break

    #swap values
    p=list1[k]
    list1[k]=list1[l]
    list1[l]=p

    #reverse the list 
    c1=list1[0:k+1]
    c2=list1[k+1:]
    c2.reverse()
    list1=c1+c2

    #finiding odd ones and printing them and storing them in l3 list
    if list1[8]%2!=0:       
        l3.append(list1)
        print list1 #in next program I replace this line with a for loop to print items in l3 list

    k=-1
    #find next value of k
    for x in range(len(list1)-2,-1,-1):
        if list1[x]<list1[x+1]:
            k=x 
            break

此程序打印预期结果。但是,当我将此代码添加到其末尾而不是打印行时,结果会完全改变。

for x in l3:
     print x

我想我犯了一些愚蠢的错误,但我找不到任何错误。 plz帮我调试它。(我在维基百科中使用了置换生成算法(使用k,l变量,如其中所述)。)

1 个答案:

答案 0 :(得分:1)

这是一个copy by reference问题。只需替换两次出现

l3.append(list1)  # cpoy by reference

使用:

l3.append(list1[:])  # copy by value