【问题标题】:How to generate all possible strings in python?如何在python中生成所有可能的字符串?
【发布时间】:2025-12-28 09:30:12
【问题描述】:

我的目标是能够生成所有可能的长度为 x 的字符串(字母和数字),并能够为每个字符串激活一个代码块。 (就像一个迭代器)唯一的问题是 itertools 中的那些不会在同一个字符串中复制字母。例如:

我得到“ABC”“BAC”“CAB”等而不是“AAA”。

有什么建议吗?

【问题讨论】:

    标签: python python-2.7 iterator


    【解决方案1】:

    使用itertools.product():

    >>> import itertools
    >>> map(''.join, itertools.product('ABC', repeat=3))
    ['AAA', 'AAB', 'AAC', 'ABA', 'ABB', 'ABC', 'ACA', 'ACB', 'ACC', 'BAA', 'BAB', 'BAC', 'BBA', 'BBB', 'BBC', 'BCA', 'BCB', 'BCC', 'CAA', 'CAB', 'CAC', 'CBA', 'CBB', 'CBC', 'CCA', 'CCB', 'CCC']
    

    请注意,创建包含所有组合的列表对于较长的字符串来说效率非常低 - 而是迭代它们:

    for string in itertools.imap(''.join, itertools.product('ABC', repeat=3)):
        print string
    

    要获取所有字符和数字,请使用string.uppercase + string.lowercase + string.digits

    【讨论】:

    • Python 3 已更改,因此内置 map 现在返回一个迭代器。使用itertools.imap 的第二个建议是不必要的,除非您的python 版本是
    【解决方案2】:

    如果您希望字母重复,请使用itertools.product()

    >>> from itertools import product
    >>> from string import ascii_uppercase
    >>> for combo in product(ascii_uppercase, repeat=3):
    ...     print ''.join(combo)
    ...
    AAA
    AAB
    ...
    ZZY
    ZZZ
    

    itertools.combinations()itertools.permutations() 不是适合您工作的工具。

    【讨论】:

      最近更新 更多