2014-09-03 102 views
2

我試圖在保持數字順序的同時生成數字列表的所有n項組合。因此,例如,如果該列表是獲取列表python的所有已排序組合

[1,2,3,4] 

長度3的有序組合將是:

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

爲了清楚起見,我要保持的數字順序,所以[1,4,2]不會是一個理想的結果。

有沒有這樣做的函數,或者一個快速的算法可以完成它?實際列表是111,我將選擇100個項目。謝謝。

+0

您使用了單詞組合,但是您描述了排列(排列保留順序)。你能澄清嗎? – user590028 2014-09-03 18:12:51

+1

排列意味着訂單很重要,但它不保留數字順序,所以它也會從上面的列表中產生[2,4,1],這不是我所需要的。 – TomR 2014-09-03 18:24:19

回答

5

你只是在尋找長度爲n的給定列表的所有組合?如果是這樣,你可以使用itertools的組合。無論哪種方式,你可能會想與itertools。

from itertools import combinations 

numbers = [1,2,3,4] 
for item in combinations(numbers, 3): 
    print sorted(item) 
+0

我不確定他是否想要排列或組合?如果事實證明OP想組合,我會刪除我的帖子。 – user590028 2014-09-03 18:11:37

+4

@ user590028是的,我最初認爲是排列,但是當我看到預期的輸出時,它指向組合。不過,我認爲他想要的是組合,同時保留它們出現在列表中的順序。例如,你可以有[1,3,4]但不是[3,1,4]。 – 2014-09-03 18:13:29

+1

頂針是正確的。我想要組合,同時保持順序,這就是爲什麼itertools中的純組合或排列函數都不能滿足需要。 – TomR 2014-09-03 18:23:04