为了账号安全,请及时绑定邮箱和手机立即绑定

蟒蛇:如何在嵌套循环中用下一个进度条替换tqdm进度条?

蟒蛇:如何在嵌套循环中用下一个进度条替换tqdm进度条?

人到中年有点甜 2022-09-20 15:41:51
我在聚比特笔记本中使用tqdm模块。假设我有以下一段带有嵌套 for 循环的代码。import timefrom tqdm.notebook import tqdmfor 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]是否有任何选项,如何在运行期间仅显示当前进度条?那么,完成迭代后的最终输出会是这样的吗?j100%|██████████| 3/3 [00:15<00:00, 5.07s/it]100%|██████████| 5/5 [00:05<00:00, 1.01s/it]
查看完整描述

4 回答

?
DIEA

TA贡献1820条经验 获得超3个赞

您可以在创建进度条时使用离开参数。像这样:


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)


查看完整回答
反对 回复 2022-09-20
?
心有法竹

TA贡献1866条经验 获得超5个赞

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


请尝试以下代码以获得所需的结果。


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)

输出:

//img1.sycdn.imooc.com//63296ee70001875c04770079.jpg

查看完整回答
反对 回复 2022-09-20
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

我更喜欢@anton-波米申科的答案。然而,如前所述,每次外部条形更新时,内部条形都会消失并重新出现,如果它快速而频繁地发生,这可能会看起来很糟糕。


正确答案(假设您不需要重用外部栏,但确实要重用内部栏):


from time import sleep

from tqdm.auto import tqdm


with tqdm(range(3)) as outer:

    inner_total = 3

    with tqdm(total=inner_total) as inner:

        for i in outer:

            inner.reset(inner_total)  # reinitialise without clearing

            for j in range(inner_total):

                sleep(1)

                inner.update()

            inner.refresh()  # print last state without clearing


查看完整回答
反对 回复 2022-09-20
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

import time

from tqdm.auto import tqdm


#initializing progress bar objects

outer_loop=tqdm(range(3))

mid_loop=tqdm(range(5))

inner_loop=tqdm(range(7))



for i in range(len(outer_loop)):


    mid_loop.refresh()  #force print final state

    mid_loop.reset()  #reuse bar

    outer_loop.update() #update outer tqdm


    for j in range(len(mid_loop)):

        inner_loop.refresh()  #force print final state

        inner_loop.reset()  #reuse bar

        mid_loop.update()  ##update mid tqdm


        for k in range(len(inner_loop)):

            inner_loop.update() #update inner tqdm

            time.sleep(1)

print(i,j,k)

请在下面找到输出:

//img1.sycdn.imooc.com//63296f0d0001a5cd04800118.jpg

这也是github问题的答案

谢谢 & 最好的问候

迈克尔


查看完整回答
反对 回复 2022-09-20
  • 4 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号