用python写了一个打印全排列的函数,但是得不到正确的结果

发布网友

我来回答

1个回答

热心网友

主要的错误是:
列表*n得到新的列表中所有列表元素指向同一个对象,修改时会同时修改

参考下面的程序

'''
Created on 2012-2-19

@author: legendxx
'''
def permute(n):

if n==1:
lst=[[1]]
else:
l1=permute(n-1)
lst=[]
for x in range(n):
for y in l1:
lst.append(list(y))
leng=len(lst)

# for x in range(leng):
# pos=x%n
# lst[x].insert(pos,n)
# print lst
for i in range(n):
for j in range(leng/n):
lst[i*leng/n+j].insert(i,n)#***************
print lst

return lst

if __name__ == '__main__':
lst=permute(3)
print "result:",lst
运行结果:
[[2, 1], [1]]
[[2, 1], [1, 2]]
[[3, 2, 1], [1, 2], [2, 1], [1, 2], [2, 1], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 1], [1, 2], [2, 1], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 2], [2, 1], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 3, 2], [2, 1], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 3, 2], [2, 1, 3], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 3, 2], [2, 1, 3], [1, 2, 3]]
result: [[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 3, 2], [2, 1, 3], [1, 2, 3]]

热心网友

主要的错误是:
列表*n得到新的列表中所有列表元素指向同一个对象,修改时会同时修改

参考下面的程序

'''
Created on 2012-2-19

@author: legendxx
'''
def permute(n):

if n==1:
lst=[[1]]
else:
l1=permute(n-1)
lst=[]
for x in range(n):
for y in l1:
lst.append(list(y))
leng=len(lst)

# for x in range(leng):
# pos=x%n
# lst[x].insert(pos,n)
# print lst
for i in range(n):
for j in range(leng/n):
lst[i*leng/n+j].insert(i,n)#***************
print lst

return lst

if __name__ == '__main__':
lst=permute(3)
print "result:",lst
运行结果:
[[2, 1], [1]]
[[2, 1], [1, 2]]
[[3, 2, 1], [1, 2], [2, 1], [1, 2], [2, 1], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 1], [1, 2], [2, 1], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 2], [2, 1], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 3, 2], [2, 1], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 3, 2], [2, 1, 3], [1, 2]]
[[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 3, 2], [2, 1, 3], [1, 2, 3]]
result: [[3, 2, 1], [3, 1, 2], [2, 3, 1], [1, 3, 2], [2, 1, 3], [1, 2, 3]]

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com