簡體   English   中英

用於遞歸生成所有唯一排列的代碼?

[英]Code for generating all unique permutations recursively?

假設我有一個列表L=[1,2,3,3,4] ,我希望遞歸地找到長度為3的所有排列。

我試圖返回所有獨特的排列,這意味着類似[1,2,3]東西不包含在輸出中兩次,因為L有兩個3

我問因為itertools.permutations包含重復項,我也試圖按順序迭代排列(從最低[1,2,3][4,3,3]迭代)因為我希望能夠每當我需要時就退出迭代。

如果我沒有正確解釋,我很抱歉。

編輯:我應該再說一遍。 在實踐中,我不想實際生成每一個可能的排列(會有太多的排列),盡管代碼可以運行完成。 我試圖以特定順序迭代所有排列,以便我可以在必要時提前保釋。

這個怎么樣:

l = [1,2,3,3,4]

print sorted(set(itertools.permutations(l,3)))

輸出:

[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 3), (1, 3, 4), ..., (4, 3, 3)]

這使它保持有序並刪除重復。


如果你想避免事先產生每個可能的排列,我會做這樣的事情:

gen = itertools.permutations(l,3)
s = set()

for i in gen:
    if i not in s:
        print i  # or do anything else
    # if some_cond: break
    s.add(i)

這里gen是一個生成器 ,因此您不會預先創建可能使用的所有元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM