Python循環(huán)實(shí)現(xiàn)n的全排列功能
描述:
輸入一個(gè)大于0的整數(shù)n,輸出1到n的全排列:
例如:
n=3,輸出[[3, 2, 1], [2, 3, 1], [2, 1, 3], [3, 1, 2], [1, 3, 2], [1, 2, 3]] n=4,輸出[[4, 3, 2, 1], [3, 4, 2, 1], [3, 2, 4, 1], [3, 2, 1, 4], [4, 2, 3, 1], [2, 4, 3, 1], [2, 3, 4, 1], [2, 3, 1, 4], [4, 2, 1, 3], [2, 4, 1, 3], [2, 1, 4, 3], [2, 1, 3, 4], [4, 3, 1, 2], [3, 4, 1, 2], [3, 1, 4, 2], [3, 1, 2, 4], [4, 1, 3, 2], [1, 4, 3, 2], [1, 3, 4, 2], [1, 3, 2, 4], [4, 1, 2, 3], [1, 4, 2, 3], [1, 2, 4, 3], [1, 2, 3, 4]]
思路:
為1時(shí),結(jié)果為1 為2時(shí),結(jié)果就是兩種:1,2 2,1(1的前后插入) 為3時(shí),結(jié)果就是六種:1,2,3 1,3,2 3,2,1 (1,2的前中后插入) 3,2,1 2,3,1 2,1,3 (2,1的前中后插入)
代碼:
import copy def full_arrange(n): data = [] # 中間結(jié)果 res = [] # 最終結(jié)果 if n == 1 : return 1 res = [[1]] for i in range(2, n+1): for j in range(len(res)): # 遍歷res數(shù)組(二維數(shù)組) for x in range(len(res[j])+1): # 遍歷res數(shù)組中的元素(一維數(shù)組) data = copy.copy(res[j]) # 淺拷貝 data.insert(x,i) # 在一維數(shù)組的不同位置插入元素,獲得新的數(shù)組 res.append(data) x += 1 j += 1 # 刪除多余數(shù)組(原始數(shù)組) 最后保留的數(shù)據(jù)(一維數(shù)組的長度) == i while True: if len(res[0]) != i: res.remove(res[0]) else: break i += 1 return res print(full_arrange(n))
總結(jié)
以上所述是小編給大家介紹的Python循環(huán)實(shí)現(xiàn)n的全排列功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
Python如何實(shí)現(xiàn)定時(shí)器功能
在本篇文章里小編給大家分享的是關(guān)于Python中的簡單定時(shí)器實(shí)例及代碼,需要的朋友們可以學(xué)習(xí)下。2020-05-05獲取python運(yùn)行輸出的數(shù)據(jù)并解析存為dataFrame實(shí)例
這篇文章主要介紹了獲取python運(yùn)行輸出的數(shù)據(jù)并解析存為dataFrame實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07python通過imaplib模塊讀取gmail里郵件的方法
這篇文章主要介紹了python通過imaplib模塊讀取gmail里郵件的方法,涉及Python操作imaplib模塊操作郵件的相關(guān)技巧,需要的朋友可以參考下2015-05-05Python移動(dòng)測試開發(fā)subprocess模塊項(xiàng)目實(shí)戰(zhàn)
這篇文章主要為大家介紹了Python移動(dòng)測試開發(fā)subprocess模塊項(xiàng)目實(shí)戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Python數(shù)據(jù)結(jié)構(gòu)之單鏈表詳解
這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)結(jié)構(gòu)之單鏈表的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09