目录
(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)上链接
(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)上链接
(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个字符或数字的全排列
祝好