python解決排列組合的方式

本文轉載自https://blog.csdn.net/kongsuhongbaby/article/details/84330094

前言

 排列組合問題在是算法中很基礎的一個問題,它們的區別就是,排列要考慮順序,組合不考慮順序。在面試的過程中可能會考到,在現實生活中也是經常可以遇到的,比如說一個3位數字的密碼鎖,要嘗試多少次才能解開?那麼用python有哪些方法可以解決此類問題呢?

問題
以一個具體的例子來說明在python中此類問題的可能解決方法,要求給定一個沒有重複數字的序列,返回其所有可能的全排列。
示例:
輸入: [1,2,3]
輸出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]


方法一:for循環遍歷

lst = [1,2,3]
result = []
for i in lst:
    for j in lst:
        for k in lst:
            if len(set((i,j,k))) == 3:
                result.append(list(set((i,j,k))))
print(result)

運行結果:

[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]

說明:for循環遍歷是很容易想到的方法,但是如果列表中的元素比較多的時候那麼嵌套的for循環就會很多,寫起來很麻煩。

方法二:itertools模塊中的permutations方法

python有現成的處理排列組合的模塊叫itertools,可以藉助其來實現。需要先import itertools將其導入,查看其中的方法:

函數語法

permutations(iterable[, r]) --> permutations object

輸入兩個參數分別爲:可迭代對象,從可迭代對象中取出幾個值來計算其排列

lst = [1,2,3]
result = []
def permute(lst):
    from itertools import permutations
    for i in permutations(lst, len(lst)):
        result.append(list(i))
    return result
print(permute(lst))

運行結果:

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

說明:自帶的模塊確實很強大,對於列表的長度沒有限制,可隨意生成任意的排列組合,此種方法牆裂推薦

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章