首页 > 解决方案 > Python:如何在嵌套循环中用下一个替换 tqdm 进度条?

问题描述

我在 Jupyter Notebook 中使用tqdm模块。假设我有以下带有嵌套 for 循环的代码。

import time
from tqdm.notebook import tqdm

for i in tqdm(range(3)):
    for j in tqdm(range(5)):
        time.sleep(1)

输出如下所示:

100%|██████████| 3/3 [00:15<00:00, 5.07s/it]
100%|██████████| 5/5 [00:10<00:00, 2.02s/it]

100%|██████████| 5/5 [00:05<00:00, 1.01s/it]

100%|██████████| 5/5 [00:05<00:00, 1.01s/it]

是否有任何选项,如何在运行期间仅显示当前 j进度条?那么,完成迭代后的最终输出会是这个样子吗?

100%|██████████| 3/3 [00:15<00:00, 5.07s/it]
100%|██████████| 5/5 [00:05<00:00, 1.01s/it]

标签: pythonjupyter-notebooktqdm

解决方案


您可以通过每次在内循环开始之前重置进度条对象来实现这一点。

试试下面的代码来达到你想要的结果。

import time
from tqdm.notebook import tqdm

#initializing progress bar objects
outer_loop=tqdm(range(3))
inner_loop=tqdm(range(5))

for i in range(len(outer_loop)):
    inner_loop.refresh()  #force print final state
    inner_loop.reset()  #reuse bar
    outer_loop.update() #update outer tqdm

    for j in range(len(inner_loop)):
        inner_loop.update() #update inner tqdm
        time.sleep(1)

输出:

输出


推荐阅读