python 全排列


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))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM