Python循環(huán)實現(xiàn)n的全排列功能
更新時間:2019年09月16日 13:45:41 作者:wuhen_n
這篇文章主要介紹了Python循環(huán)實現(xiàn)n的全排列功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
描述:
輸入一個大于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時,結(jié)果為1 為2時,結(jié)果就是兩種:1,2 2,1(1的前后插入) 為3時,結(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)實現(xiàn)n的全排列功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關文章
獲取python運行輸出的數(shù)據(jù)并解析存為dataFrame實例
這篇文章主要介紹了獲取python運行輸出的數(shù)據(jù)并解析存為dataFrame實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
python通過imaplib模塊讀取gmail里郵件的方法
這篇文章主要介紹了python通過imaplib模塊讀取gmail里郵件的方法,涉及Python操作imaplib模塊操作郵件的相關技巧,需要的朋友可以參考下2015-05-05
Python移動測試開發(fā)subprocess模塊項目實戰(zhàn)
這篇文章主要為大家介紹了Python移動測試開發(fā)subprocess模塊項目實戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
Python數(shù)據(jù)結(jié)構(gòu)之單鏈表詳解
這篇文章主要為大家詳細介紹了Python數(shù)據(jù)結(jié)構(gòu)之單鏈表的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09

