2014-09-03 47 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