python---全排列32

例子: 求列表l = [1,2,3]的全排列

l = [1,2,3]
全排列有: [1,2,3] , [1,3,2], [2,1,3],[2,3,1],[3,1,2],[3,2,1]

方法1:
#函数:permutation():
如果 列表中的元素只有一个 我们就直接返回那个列表
否则创建一个新的空列表 , 我们依次选取列表中的一个元素作为排列列表的头, 之后把剩下的元素组成一个新的列表进行全排列(这里我们用了python中的切片)
【1,2,3】,【1,3,2】
【2,1,3】,【2,3,1】
【3,1,2】,【3,2,1】

def permutation(S,n):
    if n <=1:
        return S
    else:
        result = []
        for i in range(n):
            ch = S[i]
            rest = S[0:i] + S[i+1:n]

            for s in permutation(rest,n-1):
                result.append(ch + s)

    return result


result = permutation(['1','2','3'],3);
print(result)

方法2:
其实就是 把每一个把每一个元素都依次放在头部然后进行排列
swap()函数就是对列表中的元素进行位置互换
【1,2,3】 、【1,3,2】
【2,1,3】、【2,3,1】
【3,2,1】、 【3,1,2】

def swap(i,j,nums):

    temp = nums[i]
    nums[i]=nums[j]
    nums[j]=temp

def qpl(nums , l, r):
    if (l == r):
        print(nums)        
    for j in range(l,r+1):
        swap(j,l,nums)
        qpl(nums, l + 1, r)
        swap(j,l,nums)


qpl([1,2,3],0,2)

方法三:
python自带

from itertools import permutations
print(list(permutations([1,2,3])))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值