生成所有可能的8个符号字符串.蛮力8符号密码.蟒蛇

Pol*_*Pol -1 python brute-force

我需要编写生成器,它产生所有可能的8个符号字符串.从像这样的符号数组:

leters = ['1','2','3','4','5','6','7','8','9','0','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m']
Run Code Online (Sandbox Code Playgroud)

骨架看起来像这样:

def generator():
    """
    here algorithm
    """
    yield string
Run Code Online (Sandbox Code Playgroud)

假设要返回这样的列表 ['00000001','00000002','00000003', ......'mmmmmmmm']

Cos*_*con 7

itertools.product(leters, repeat=8)
Run Code Online (Sandbox Code Playgroud)

编辑:让它给你字符串而不是元组:

def generator(leters):
    a = itertools.product(leters,repeat=3)
    while a:
        yield "".join(a.next())
Run Code Online (Sandbox Code Playgroud)


Dra*_*ric 6

itertools.combinations()itertools.combinations_with_replacement()返回一台发电机

>>> letters = ['a', 'b', 'c']
>>> from itertools import combinations
Run Code Online (Sandbox Code Playgroud)

print()在示例中用来说明输出.用它yield来代替它,得到一台发电机.

>>> for c in combinations(letters, 2): 
        print(c)
... 
('a', 'b')
('a', 'c')
('b', 'c')

>>> for c in combinations(letters, 2): 
        print(''.join(c))
... 
ab
ac
bc
>>> 

>>> for c in itertools.combinations_with_replacement(letters, 2): 
        print(''.join(c))
... 
aa
ab
ac
bb
bc
cc
Run Code Online (Sandbox Code Playgroud)

如果您对包含英文字母和数字的所有8个字母密码强制使用它,那么您希望迭代超过~2.8万亿个字符串

编辑 如果您知道没有重复的元素,请使用permutations

>>> for c in itertools.permutations(letters, 2): 
        print(''.join(c))
... 
ab
ac
ba
bc
ca
cb
Run Code Online (Sandbox Code Playgroud)

这给你了abba

对于itertools.product()Cosmologicon解决方案中最常用的蛮力序列使用