当我运行此代码时,我没有得到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
相反,它会跳过一些。当我重复三次角色时,我得到了我需要的所有组合,但我得到了多次。这需要三倍的时间,而不是我想要的。我将要计算数百万种组合,所以我需要知道重复这些字符的替代方法。
答案 0 :(得分:7)
您正在寻找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