2013-05-02 109 views
6

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

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

有什么建议吗?

回答

21

使用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

+1

Python 3已更改,以便内置'map'现在返回一个迭代器。除非你的python版本是<3.0,否则使用'itertools.imap'的第二个建议是不必要的。 – ngoue 2016-01-08 16:52:13

+2

问题标记为[tag:python-2.7] ... – ThiefMaster 2016-01-08 23:42:42

+0

你是对的,先生! – ngoue 2016-01-09 06:26:47

6

使用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()不适合作业的正确工具。

相关问题