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']
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)
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)
这给你了ab和ba
对于itertools.product()Cosmologicon解决方案中最常用的蛮力序列使用
| 归档时间: |
|
| 查看次数: |
11418 次 |
| 最近记录: |