我的目标是能够生成所有可能的长度为 x 的字符串(字母和数字),并能够为每个字符串激活一个代码块。(就像一个迭代器)唯一的问题是 itertools 中的那些不会在同一个字符串中复制字母。例如:
我得到“ABC”“BAC”“CAB”等而不是“AAA”。
有什么建议么?
我的目标是能够生成所有可能的长度为 x 的字符串(字母和数字),并能够为每个字符串激活一个代码块。(就像一个迭代器)唯一的问题是 itertools 中的那些不会在同一个字符串中复制字母。例如:
我得到“ABC”“BAC”“CAB”等而不是“AAA”。
有什么建议么?
>>> 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
.
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()
不是您工作的正确工具。