【问题标题】:Generate all possible tuples combinations of given size for given range of values为给定的值范围生成给定大小的所有可能的元组组合
【发布时间】:2019-06-28 17:06:31
【问题描述】:

假设我有 3 个参数:一个范围、n 元素元组的大小(实际上它也可能是一个列表)和可能的组合(没有或有重复)。我想从该范围内获取所有可能的数字组合。

例如:

  • 范围 a..b = 1..5
  • 元组大小 s=2
  • 没有重复

    结果是:

    (1, 1)(1, 2)(1, 3)(1, 4)(1, 5) (2, 1)(2, 2)(2, 3)(2, 4)(2, 5) (3, 1)(3, 2)(3, 3)(3, 4)(3, 5) (4, 1)(4, 2)(4, 3)(4, 4)(4, 5) (5, 1)(5, 2)(5, 3)(5, 4)(5, 5)

有了重复,当然会有更多的元组。

显然可以迭代完成,但是实现这个任务的更 Pythonic 和优雅的方式是什么(可能是额外的工具)?

【问题讨论】:

  • 您说您的示例结果没有重复,但它包含(1, 1)、(2, 2) 等。它也有(1, 2) 和(2, 1),所以这不是您对重复的定义重新使用。 带有重复的版本会是什么样子?

标签: python python-3.x


【解决方案1】:

有重复:

>>> from itertools import product
>>> list(product(range(1, 6), repeat=2))
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5)]

没有重复:

>>> from itertools import permutations
>>> list(permutations(range(1, 6), 2))
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 4), (3, 5), (4, 1), (4, 2), (4, 3), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4)]

【讨论】:

    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多