2017-07-02 49 views
-4

我正在尋找解決涉及數組的不同排列的問題。我想要一個函數來檢查被審查的數組是否匹配一個條件,但是如果不匹配,則會生成一個新的排列來檢查,等等等等。我相信這涉及到一個while語句,所以我的問題更多地在於如何創建這樣的算法來在每次迭代時生成唯一的(但不是隨機的以避免重複)置換。存在限制:該數組將包含至少2個但不超過10個元素。此外,如果條件不匹配,返回應該是False到目前爲止,我還沒有代碼,因爲我不能提出我想要的算法。任何想法都會有幫助。Python:組合

+0

堆棧溢出不是在這裏爲你做你的功課。在尋求幫助之前,你應該至少投入一點努力。例如,使用google搜索「python permutations」會很快告訴你,標準庫中的'itertools'模塊有一個函數可以爲你生成排列。 – Blckknght

+0

@Blckknght謝謝您的迴應,但是我不會爲了做家庭作業而去參加這個活動,而且我也不打算列出每一個組合,甚至是創建它 - 這對於我的目標來說太過分了。我需要每次迭代更改數組以獲得新的排列。如果有一種方法可以用itertools來做到這一點,請您詳細說明一下嗎? –

+0

像'itertools'中的所有函數一樣,'itertools.permutations'函數返回一個惰性迭代器對象。迭代器在其上生成輸入迭代的每個排列。如果在早期發現可接受的置換,則可以跳出循環,其餘的置換不會生成。 – Blckknght

回答

0

爲什麼你需要重新發明輪子?既然你已經標記了python,你應該知道有很多庫可以幫助你做這種有用的事情。這種庫之一是itertools,更具體的itertools.permutations功能:

>>> from itertools import permutations 
>>> x = [1, 2, 3, 4, 5, 6] 
>>> for p in permutations(x): 
...  print(p) 
... 
(1, 2, 3) 
(1, 3, 2) 
(2, 1, 3) 
(2, 3, 1) 
(3, 1, 2) 
(3, 2, 1) 

如果你必須寫一個算法自己,那麼你應該瞭解Johnson-Trotter Algorithm生成排列。它非常直觀,並在O(n!)時間產生排列。