# 全排列函數(shù)permutation,需要使用遞歸來列舉,也是一個(gè)知識(shí)點(diǎn)(參考網(wǎng)絡(luò))
# 除了使用模塊,當(dāng)然可以自己寫一個(gè)函數(shù)來實(shí)現(xiàn):
#下面是字典序
def permutation(xs): #簡化問題,假定形參xs是列表
if len(xs) == 0 or len(xs) == 1:
return [xs]
result = []
for i in xs:
temp_list = xs[:] #對(duì)xs進(jìn)行切片操作,使得temp_list的值和xs一樣 但是temp_list的改變不影響xs
temp_list.remove(i)
temp = permutation(temp_list) #使用遞歸 生成刪掉一個(gè)元素的xs的全排列
for j in temp: #對(duì)temp中的每一項(xiàng)再進(jìn)行遍歷
j.insert(0,i) #j[0:0] = [i]在index 0 的位置插入之前刪去的i
result.append(j)
return result
for i in permutation([1,2,3,4]):
print(i)
#下面是非字典序排列
li=[1,2,3,4]
res=[]
def Perm(m):#交換序
global li
if m==len(li)-1 :
res.append(li)
else:
for j in range(m,len(li)):
li[j],li[m]=li[m],li[j]
Perm(m+1)
li=li[:]
li[j],li[m]=li[m],li[j]
Perm(0)
for i in res:
print(i)
'''
當(dāng)用[:]賦值時(shí),生成的是一個(gè)新的對(duì)象,改變時(shí)不會(huì)改變之前的值,是深拷貝
'''
全排列(字典序和非字典序)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 無重復(fù)字符的全排列和組合數(shù)目問題(求這類問題一般用遞歸,把問題分解成1+n-1,對(duì)n-1部分繼續(xù)遞歸分解) 組合:...
- 一、全排列的概念 排列: ??從n個(gè)數(shù)中選取m(m<=n)個(gè)數(shù)按照一定的順序進(jìn)行排成一個(gè)列,叫作從n個(gè)元素中取m個(gè)...