Python:如何用嵌套循环中的下一个替换 tqdm 进度条?

Jar*_*děk 5 python jupyter-notebook 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)
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

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]
Run Code Online (Sandbox Code Playgroud)

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

100%|??????????| 3/3 [00:15<00:00, 5.07s/it]
100%|??????????| 5/5 [00:05<00:00, 1.01s/it]
Run Code Online (Sandbox Code Playgroud)

Ham*_*hid 7

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

尝试以下代码以获得您想要的结果。

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)
Run Code Online (Sandbox Code Playgroud)

输出:

输出


Ant*_*nko 5

创建进度条时可以使用 leave 参数。像这样的东西:

import time
from tqdm import tqdm

for i in tqdm(range(3)):
    for j in tqdm(range(5), leave=bool(i == 2)):
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)