python - 作为字符串列表的集合的所有可能组合

标签 python set python-itertools

我正在尝试用 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/

相关文章:

python - 将队列拆分为训练/测试集

mysql - 如何从表名为变量的 MySQL 中进行选择

python - 在python中查找两个字符串列表的交集

python - 有没有办法使用 Python 的 Celery 在具有特定任务 ID 的特定任务成功或失败时立即收到通知?

python - 用于 Python 的 MySQL 连接器

python - 列表中元组的交集 - python

Python itertools组合迭代控制

Python,压扁一个丑陋的嵌套for循环

python - 更快的 numpy 解决方案而不是 itertools.combinations?

python - pygame中的动画