我正在尝试用Python编写一个函数
def all_strings(alpha,length):
# ...
采用给定的字母(alpha
)和length
,并返回受给定长度限制的所有可能的字母组合。
例如:
all_strings({0,1}, 3)
应该返回:
['000', '001', '010', '011', '100', '101', '110', '111']
我尝试循环遍历集合,但你不能在python中迭代一个集合。我也考虑过itertools permutations
和combinations
不允许重复数字。
答案 0 :(得分:3)
您可以使用itertools.product
:
>>> from itertools import product
>>> list(product({0,1}, repeat=3))
[(0, 0, 0),
(0, 0, 1),
(0, 1, 0),
(0, 1, 1),
(1, 0, 0),
(1, 0, 1),
(1, 1, 0),
(1, 1, 1)]
您还可以str.join
结果来获取字符串:
>>> list(''.join(map(str, comb)) for comb in product({0,1}, repeat=3))
['000', '001', '010', '011', '100', '101', '110', '111']
如果你关心效率,你也可以将初始集转换为一组字符串,以最大限度地减少字符串转换(感谢@Stefan Pochmann在评论中指出这一点):
>>> list(map(''.join, product(map(str, {0,1}), repeat=3)))
['000', '001', '010', '011', '100', '101', '110', '111']