获取Python列表的所有有序组合

4
我将尝试生成一个数字列表的所有n项组合,并保持数字顺序。例如,如果列表是:
[1,2,3,4]

长度为3的有序组合是:

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

需要明确的是,我必须保持数字的顺序,因此[1,4,2]不是期望得到的结果。

是否有一个函数可以做到这一点,或者有一种快速算法可以完成它?实际列表长度为111,我将选择100个项目。谢谢。


你使用了“组合”这个词,但你描述的是“排列”(排列保留顺序)。你能澄清一下吗? - user590028
1
排列意味着顺序很重要,但它不保留数字顺序,因此它也会从上面的列表中产生[2,4,1],这不是我需要的。 - TomR
1
如何在Python中获取长度为n的所有组合 - Giorgos Xou
实际列表有111项,我将选择100项。只是为了确保你明白,这样的组合几乎有半亿亿个。 - Karl Knechtel
1个回答

6

你是否只是想寻找给定长度为n的列表的所有组合?如果是,你可以使用itertools中的combinations。无论哪种方式,你都可能需要使用itertools。

from itertools import combinations

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

我不确定他想要排列还是组合?如果最终发现楼主想要组合,我会删除我的帖子。 - user590028
4
是的,我最初认为是排列组合,但当我看到期望输出时,它指向了组合。然而,我认为他想要的是保留列表中出现顺序的组合。例如,您可以有[1,3,4],但不能有[3,1,4]。 - user3960432
2
Thimble是正确的。我想要保留顺序的组合,这就是为什么itertools中的纯组合或排列函数都不能满足我的需求。 - TomR
@TomR,这取决于您如何定义顺序。在您的示例中,您展示了[2,3,4]在[1,2,4]之前。正常惯例是将后者放在底部。您需要定义您想要的顺序。组合会自动对它们进行排序,从第一个索引开始并向前移动。 - user3960432
1
Thimble 给出了正确的答案(因此我删除了我的排列答案)。他所需要做的就是对结果进行排序。我已经编辑了他的答案以反映您的需求。 - user590028
那很好。我完全不关心组合的顺序,只要组合本身是有序的。Thimble的答案非常完美。 - TomR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接