如何在python中生成所有可能的字符串?

JD3*_*JD3 9 python iterator python-2.7

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

我得到"ABC""BAC""CAB"等而不是"AAA".

有什么建议?

Thi*_*ter 26

用途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']
Run Code Online (Sandbox Code Playgroud)

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

for string in itertools.imap(''.join, itertools.product('ABC', repeat=3)):
    print string
Run Code Online (Sandbox Code Playgroud)

要使用所有字符和数字string.uppercase + string.lowercase + string.digits.

  • Python 3 更改为内置`map` 现在返回一个迭代器。除非你的 python 版本小于 3.0,否则使用 `itertools.imap` 的第二个建议是没有必要的。 (2认同)

Mar*_*ers 8

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
Run Code Online (Sandbox Code Playgroud)

itertools.combinations()itertools.permutations()不是为你的工作正确的工具.