N个字符或数字的全排列

目录

一、Itertools.permutation()

1、对字符串

2、对元组

3、对列表

4、对字典

二、N个字符或数字的全排列

1、python代码

三、(后面的补充)两道例题

1、第一道例题

(1)上链接

(2)python代码——permutations秒杀

2、第二道例题

(1)上链接

(2)python代码——permutations+去重秒杀


一、Itertools.permutation()

参考:python——permutations()函数_xiaochuhe.的博客-CSDN博客_permutations函数

无例题,笔者只是想说明 Itertools.permutation() 的使用。

Itertools.permutation() 功能属于组合发电机。用于简化组合结构(例如排列,组合和笛卡尔积)的递归生成器称为组合迭代器。

如单词“Permutation”所理解的,它指的是可以对集合或字符串进行排序或排列的所有可能的组合。

同样在这里 itertools.permutations() 方法为我们提供了迭代器可能存在的所有可能的安排,并且所有元素均根据该位置而不是根据其值或类别被假定为唯一。所有这些排列都是按字典顺序提供的。

功能 itertools.permutations() 接受一个迭代器和 “r” (需要排列的长度)作为输入,并假设 “r” 作为迭代器的默认长度(如果未提及),并分别返回所有可能的长度为 “r” 的排列。Permutations(iterator, r)

格式:

permutations(iterator, r)

举例(查看类型):

a=['1','2','3']
from itertools import permutations
#permutations(a,3)
print (permutations(a,3))
print (type(permutations(a,3)))

输出类型:

显然 permutations(iterator, r) 返回了一个迭代器,需要用循环来依次解析。

1、对字符串

from itertools import  permutations
a = 'abc'   #对字符串进行permutations排列组合
for i in permutations(a,3):
    x = ''.join(i)
    print (x,end=' ')
print ('\n------------------------------------')

输出:

2、对元组

from itertools import  permutations
c = ('e','f','g')  #对元组进行permutations排列组合
for j in permutations(c,2):
    print (j)
print ('------------------------------')

输出:

3、对列表

from itertools import  permutations
b = [1,2,3] #对列表进行permutations排列组合
for j in permutations(b,3):
    print (''.join('%d'%o for o in j))
print ('-----------------------------------------------------')

输出:

4、对字典

from itertools import  permutations
e = {'青鸟':'最美','萧风':'最帅'}  #对字典进行permutations排列组合
for i in permutations(e,2):
    print (''.join('%s'%s for s in i)) #字典只对键进行排列组合
print ('-----------------------------------------------------')

输出:

  注:字典只对键进行排列组合!切记!切记!

二、N个字符或数字的全排列

1、python代码

# n个数字的不同排列
from itertools import permutations
n=int(input())
s=[i for i in input().split()]
for p in permutations(s):
  print("".join(map(str,p)))
 
# n个字母的不同排列
str=list(input().split()) # 根据空格划分开
for p in permutations(str):
  print("".join(p))

'''
由于join的原因,第一个print需要把数字转化为字符,因为join只能把字符连接起来
'''
# 经力扣测试,该代码只能用于正整数,只能说这个模板的join太烂了,负数转字符再转回去会有bug
# 下面那个 def 定义的函数才是适用于整型的!
from itertools import permutations

nums=list(map(int,input().split())) # 1 2 3

res=[]
for p in permutations(nums):
    res.append(list(map(int,"".join(map(str,p)))))  # 显然join只能连接字符
    # res.append("".join(map(str,p)))  # [[], '123']

print(res)


# s=['1','2','3']
# print("".join(s))  # 123
# print("".join(s).split())  # ['123'], 即 split() 返回的是一个数组


# str="123"
# print(list(str)) # ['1', '2', '3']

'''
class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res=[]
        from itertools import permutations
        for p in permutations(nums):
            res.append(list(p))
        return res
'''

三、(后面的补充)两道例题

1、第一道例题

(1)上链接

46. 全排列 - 力扣(Leetcode)

(2)python代码——permutations秒杀

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res=[]
        from itertools import permutations
        for p in permutations(nums):
            res.append(list(p))
        return res

2、第二道例题

(1)上链接

47. 全排列 II - 力扣(Leetcode)

(2)python代码——permutations+去重秒杀

class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        res=[]
        from itertools import permutations
        for p in permutations(nums):
            if list(p) not in res:
                res.append(list(p)) # 需要去重,去重方法有很多
        return res

python去重参考博客:python列表常见的5种去重方法_叶落无痕123的博客-CSDN博客_python 列表去重

以上,N个字符或数字的全排列

祝好

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕飞雨的头发不能秃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值