python - 如何估计迭代时间并用 for 循环的 tqdm 显示?
问题描述
我想估计以下代码的迭代持续时间并将其显示在进度条(tdqm)上。这个函数将给出所有可能的组合string.printable
。
import strings
from itertools import combinations
def generate_combinations(iterable):
lst = list(iterable)
for lenght in range(0, len(lst) + 1):
for i in combinations(lst, lenght):
with open('passwords.txt', 'a') as f:
w = ''.join(map(str, i))
f.write(w + '\n')
generate_combinations(string.printable)
我认为你可以使用time
and来做到这一点tqdm
。
预期输出:
estimated time: 12 seconds left
tqdm progress bar: 12% |||||||...
解决方案
最终答案(@jq170727 的建议)是以下代码:
import string
from tqdm.auto import trange, tqdm
from itertools import permutations
请求的生成器(在 google colab 上,使用 TPU:大约 10k it / s)
def combined(lst, lenStart, lenEnd):
for i in trange(lenStart, lenEnd + 1, desc='Progress'):
for subset in tqdm(permutations(lst, i), desc='Subsets', leave = False):
w = ''.join(map(str, subset))
yield w
在这里,我们得到了相同的生成器,效率更高(在 google colab 上,使用 TPU:大约 950k / s)
def compress_permutation(lst, lenStart, lenEnd):
yield ','.join([''.join(map(str, subset)) for i in trange(lenStart, lenEnd + 1, desc='Progress') for subset in tqdm(permutations(lst, i), desc='Subsets', leave = False)])
iterable = list(string.printable[:94])
lenStart, lendEnd = 1, 9
for subset in compress_permutation(iterable, l1, l2):
with open('passwords.txt', 'a') as f:
f.write(subset)
推荐阅读
- discord.js - Discord.Js 机器人不等待响应
- javascript - 如何在 JavaScript 中的多维(2D)数组中的关联数组中设置/获取值
- javascript - 我无法从对象中检索变量
- java - 在相对布局中限制自定义视图
- sql - 我的 SQL 查询正在创建新表,如何改为更新现有表
- javascript - 遵循 OOP 范式和 DRY 原则,如何最好地重构这个计时器/秒表代码库以实现更好的代码重用?
- python - 大熊猫抓取价值以填充新列
- flutter - 键盘在 modalBottomSheet 中立即关闭
- javascript - 如何在不使用相同音频 ID 的情况下播放从数据库中获取的多个音频文件
- reactjs - 为什么这些元组类型是联合的?