我正在尝试用 Python 编写一个函数
def all_strings(alpha,length):
# ...
它接受给定的字母表(alpha
)和长度
并返回受给定长度限制的字母表的所有可能组合。
例如:
all_strings({0,1}, 3)
应该返回:
['000', '001', '010', '011', '100', '101', '110', '111']
我尝试循环遍历集合,但无法在 python 中遍历集合。我也考虑过 itertools,但是排列
和组合
不允许数字重复。
最佳答案
您可以使用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']
关于python - 作为字符串列表的集合的所有可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42591283/