python – 哪个itertools生成器不跳过任何组合?

当我运行此代码时,我没有获得3个字符的所有可能组合:

def comb(iterable, r):
    pool = tuple(iterable)
    n = len(pool)
    for indices in permutations(range(n), r):
        if sorted(indices) == list(indices):
            yield tuple(pool[i] for i in indices)
def start():
    for x in comb("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12234567890!@#$%^&*?,()-=+[]/;",3):
        print x

相反,它会跳过一些.当我重复三次角色时,我得到了我需要的所有组合,但我得到了多次.这需要三倍的时间,而不是我想要的.我将计算数百万个组合,所以我需要知道重复字符的替代方法.

解决方法:

您正在寻找itertools.product(characters,repeat = 3).

请参阅itertools.product文档.

>>> ' '.join(''.join(x) for x in itertools.product('abcd', repeat = 2))
aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd
上一篇:如何有效地迭代迭代器上的“n-wise”


下一篇:Python itertools 操作迭代对象