python 全排列

本文介绍了使用Python实现全排列的方法,包括利用itertools模块快速生成全排列以及通过递归方式实现的自定义全排列算法。递归算法部分展示了二叉树递归思想的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/nyist-xsk/p/9463495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值