【问题标题】:Get all ordered combinations of list python获取列表python的所有有序组合
【发布时间】:2014-09-03 18:02:55
【问题描述】:

我正在尝试生成数字列表的所有 n 项组合,同时保持数字顺序。例如,如果列表是

[1,2,3,4]

长度为 3 的有序组合将是:

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

要清楚,我必须保持数字顺序,所以 [1,4,2] 不会是理想的结果。

是否有执行此操作的函数,或者可以完成此操作的快速算法?实际列表是 111,我将选择 100 个项目。谢谢。

【问题讨论】:

  • 您使用了单词组合,但您描述了排列(排列保留顺序)。你能澄清一下吗?
  • 排列意味着顺序很重要,但它不保留数字顺序,所以它也会从上面的列表中产生[2,4,1],这不是我需要的。

标签: python combinations itertools


【解决方案1】:

您是否只是在寻找长度为 n 的给定列表的所有组合?如果是这样,您可以使用来自 itertools 的组合。无论哪种方式,您都可能想要使用 itertools。

from itertools import combinations

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

【讨论】:

  • 我不确定他是想要排列还是组合?如果结果是 OP 想要组合,我会删除我的帖子。
  • @user590028 是的,我最初认为是排列,但是当我看到预期的输出时,它指向了组合。但是我认为他想要的是组合,同时保留它们在列表中出现的顺序。例如,您可以有 [1,3,4] 但不能有 [3,1,4]。
  • 顶针是正确的。我想要组合同时保持顺序,这就是为什么 itertools 中的纯组合或排列函数都不能满足我的需要。
  • @TomR 这取决于您如何定义订单。在您的示例中,您显示 [2,3,4] 在 [1,2,4] 之前。正常的约定会将其放在底部。您需要定义您想要的顺序。组合自动从第一个索引开始对它们进行排序并向前移动。
  • 顶针有正确的答案(所以我删除了我的排列答案)。他需要做的就是对结果进行排序。我已经编辑了他的答案以反映您的需求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
相关资源
最近更新 更多