【问题标题】:Python Permutations Limited to only increasing numbers [duplicate]Python排列仅限于增加数字[重复]
【发布时间】:2017-05-04 19:22:26
【问题描述】:

我正在尝试创建一个函数,该函数将生成列表的所有排列,但仅限于 len(n) 的集合,并且只能从左到右增加。例如,如果我有列表l = [2,4,6,8,10]n = 3,结果应该是

[2,4,6],
[2,4,8],
[2,4,10],
[2,6,8],
[2,6,10],
[2,8,10],
[4,6,8],
[4,6,10],
[6,8,10]

我见过很多置换函数的变体,但没有一个有这种限制。

【问题讨论】:

  • 自然组合不会重复,所以如果您有一个排序列表,list(itertools.combinations(l, 3)) 应该可以正常工作吗?
  • @ayhan 这应该是答案。或者[list(x) for x in itertools.combinations(lst, 3)] 创建子列表,而不是元组。
  • @ayhan 我们确定订单不会改变吗?
  • @AAron 你的意思是子列表的顺序?如果您不确定,您可以随时对结果进行排序
  • @ayhan 我不怪你回答重复,因为排序部分是新的,这是真的。既然您回答了,就将其作为重复项关闭是正确的做法:您的回答正是回答了这个问题,并且重复项可能提供了更多种类。

标签: python permutation


【解决方案1】:

来自itertools docs

组合按字典排序顺序发出。因此,如果输入的可迭代对象已排序,则组合元组将按排序顺序生成。

因此,如果您有一个排序列表,那么使用itertools.combinations 您将获得您想要的结果。如果没有,您可以先拨打sorted()

lst = range(2, 11, 2)

list(itertools.combinations(lst, 3))
Out: 
[(2, 4, 6),
 (2, 4, 8),
 (2, 4, 10),
 (2, 6, 8),
 (2, 6, 10),
 (2, 8, 10),
 (4, 6, 8),
 (4, 6, 10),
 (4, 8, 10),
 (6, 8, 10)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2016-07-19
    • 2021-03-08
    • 2011-11-02
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多