【问题标题】:How to use tqdm to iterate over a list如何使用 tqdm 遍历列表
【发布时间】:2018-08-25 11:27:24
【问题描述】:

我想知道处理某个列表需要多长时间。

for a in tqdm(list1):
    if a in list2:
        #do something

但这不起作用。如果我使用for a in tqdm(range(list1)),我将无法检索列表值。

你知道怎么做吗?

【问题讨论】:

    标签: python python-3.x list loops tqdm


    【解决方案1】:
    import tqdm
    
    for p in tqdm.tqdm([10,50]):
        print(p)
    

    from tqdm import tqdm
    
    for p in tqdm([10,50]):
        print(p)
    

    【讨论】:

      【解决方案2】:

      我也有这个问题。 就我而言,我写道:

      import tqdm
      

      改为

      from tqdm import tqdm
      

      【讨论】:

        【解决方案3】:

        我写了这么多答案,因为我个人在我的迷你项目和项目的不同地方都使用了所有这些。根据问题,有些可能无关紧要,但在其他地方会有用。

        list1 = list(range(100))
        
        import tqdm
        for x in tqdm.tqdm(list1):
                sleep(0.01)
        

        或者

        tlist1 = tqdm.tqdm(list1)
        for x in tlist1:
                sleep(0.01)
        

        基本上,您正在传递列表以创建一个 tqdm 实例。

        您可以使用tqdm documentation 中的另一种解决方法:

        # DOESN't work well in terminal, but should be ok in Jupyter Notebook
        with tqdm.tqdm(total=len(list1)) as t:
            for x in list1:
                sleep(0.01)
                t.update(1)
        

        使用生成器手动更新 trange 对象:

        def literate(list1):
            t = trange(len(list1))
            for x in list1:
                t.update(1)
                yield x
        
        for x in literate(list1):
            sleep(0.01)
        

        自动更新:

        def li_iterate(li):
            l = iter(li)
            for _ in trange(len(li)):
                yield next(l)
        
        for x in li_iterate(list1):
            sleep(0.01)
        

        除了问题之外,如果您使用的是 pandas 数据框,您可能希望在某个时候使用它(在 google-colaboratory 中):

        # %% implies cell magic in google-colab
        %%capture
        from tqdm.notebook import tqdm as tq
        tq().pandas()
        
        def fn(x):
            for a in list2:
                print(x, a)
        
        import pandas as pd
        list1 = list(range(0, 9))
        pd.DataFrame(data=list1).progress_apply(fn)
        

        -喜满树

        【讨论】:

          【解决方案4】:

          List 是其中的元素列表,因此如果您执行len(ls),它会为您提供列表中的元素数量。 range 内置函数将遍历范围,因此下面的 for 循环应该适用于 tqdm

          from tqdm import tqdm
          
          ls = [i for i in range(0,20000000)]
          
          for i in tqdm(range(len(ls))):
            ## code goes here ##
            pass
          

          【讨论】:

            猜你喜欢
            • 2019-02-14
            • 1970-01-01
            • 1970-01-01
            • 2013-01-26
            • 2018-12-27
            • 2011-01-21
            • 2022-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多