2

このコードを実行すると、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

代わりに、いくつかをスキップします。キャラクターを3回繰り返すと、必要な組み合わせはすべて手に入りましたが、何度か手に入れました。これには3倍の時間がかかり、私が望んでいることではありません。何百万もの組み合わせを計算するので、文字を繰り返す代わりの方法を知る必要があります。

4

1 に答える 1

8

あなたが探して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
于 2012-04-19T18:45:03.633 に答える