Ami*_*old -1 python-itertools python-3.x
我有一个非常大的产品,期望来自itertools.product.
for result in product(items, repeat=9):
# stuff
Run Code Online (Sandbox Code Playgroud)
这需要花费很多时间,我正在寻找从某个项目开始的方法,因为我无法一次性完成.
我可以做以下事情:
gen = product(items, repeat=9):
for temp in gen:
if temp == DESIRED_VALUE:
break
for result in gen:
# stuff
Run Code Online (Sandbox Code Playgroud)
但这需要花费很多时间,就像我刚刚重启程序一样.那么,有没有办法"跳过去"而不浪费时间迭代整个事情?
虽然我一开始就严厉关注强奸密码,但我可以提供一个答案.
您可以使用islice在迭代中跳过一定数量的步骤.这意味着您需要跟踪到目前为止已完成的尝试次数,以便知道以后要恢复的位置.
START_VALUE = 200
all_combos = itertools.product(letters,repeat=9)
#start at START_VALUE and stop at None (the end)
combos = itertools.islice(all_combos,START_VALUE,None)
for i,password in enumerate(combos,start=START_VALUE):
...
Run Code Online (Sandbox Code Playgroud)
请注意,这仅适用于以下 值sys.maxsize.
您还可以使用相同的公式计算给定密码的索引以转换基数:
def check_value(password):
pos = len(letters)
value = 0
for i,c in enumerate(reversed(password)):
value+= (pos**i) * letters.index(c)
return value
>>> check_value("aaaacbdaa")
29802532
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
561 次 |
| 最近记录: |