【问题标题】:Python - How to generate permutations of size greater than the number of list elementsPython - 如何生成大小大于列表元素数量的排列
【发布时间】:2015-06-05 17:45:10
【问题描述】:

对不起,如果这个标题没有意义。我的意思是:我有一个列表[A, B, C],我想要这些元素的所有可能排列来填充长度为 10 的列表。

[A, B, C] => [A, A, A, A, A, A, A, A, A, A]
          => [A, A, A, A, A, A, A, A, A, B]
          ...
          => [C, C, C, C, C, C, C, C, C, C]

我一直在阅读itertools 文档,但permutations 函数在这种情况下不起作用,除非输出列表长度小于或等于 3。谢谢!

【问题讨论】:

    标签: python list iteration permutation


    【解决方案1】:

    您正在生成值的产品,因此请使用 itertools.product() 和重复集:

    from itertools import product
    
    for combo in product(['A', 'B', 'C'], repeat=10):
    

    演示:

    >>> from itertools import product
    >>> products = product(['A', 'B', 'C'], repeat=10)
    >>> next(products)
    ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A')
    >>> next(products)
    ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B')
    >>> next(products)
    ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C')
    >>> from itertools import islice
    >>> skip_to_end = islice(products, (3 ** 10) - 6, None)
    >>> next(skip_to_end)
    ('C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'A')
    >>> next(skip_to_end)
    ('C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'B')
    >>> next(skip_to_end)
    ('C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C')
    

    【讨论】:

    • 啊,完美。很抱歉这个简单的问题 - 不知道该计算的术语。非常感谢!
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多