发布网友
共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]]