itertools模块现成的全排列:
for i in itertools.permutations('abcd',4):
print ''.join(i)
相关全排列算法:
def perm(l):
if(len(l)<=1):
return [l]
r=[]
for i in range(len(l)):
s=l[:i]+l[i+1:]
p=perm(s)
for x in p:
r.append(l[i:i+1]+x)
return r
#递归,下降二叉树
def perm(lis,begin,end):
#print "调用perm函数"
if begin>=end:
print lis
else:
i = begin
for num in range(begin,end):
lis[num],lis[i] = lis[i],lis[num] #固定当前位置,在进行下一位的排列
#print "-----num:%d,begin:%d"%(num,begin)
perm(lis,begin+1,end)
#print "*****num:%d,begin:%d"%(num,begin)
#调用结束之后还需要回溯将交换位置的元素还原,以供其他下降路径使用(二叉树)
lis[num],lis[i] = lis[i],lis[num]
lis = [1,2,3,4]
perm(lis,0,len(lis))