我写了一个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变量,如其中所述)。)
答案 0 :(得分:1)
这是一个copy by reference
问题。只需替换两次出现:
l3.append(list1) # cpoy by reference
使用:
l3.append(list1[:]) # copy by value