Python 链接的iterables的TQM进度条

Python 链接的iterables的TQM进度条,python,itertools,tqdm,Python,Itertools,Tqdm,如果我想在Python中组合两个迭代器,一种方法是使用 例如,如果我有两个范围range(50,100,10)和range(95,101),我可以通过itertools.chain(range(50,100,10),range(95,101))得到一个范围[50,60,70,80,90,95,96,97,98,99,100] tqdm是Python中可扩展的进度条。但是,默认情况下,它似乎无法计算itertools.chain表达式中的项数,即使它们是固定的 一种解决方案是将范围转换为列表。然而

如果我想在Python中组合两个迭代器,一种方法是使用

例如,如果我有两个范围
range(50,100,10)
range(95,101)
,我可以通过
itertools.chain(range(50,100,10),range(95,101))
得到一个范围
[50,60,70,80,90,95,96,97,98,99,100]

tqdm
是Python中可扩展的进度条。但是,默认情况下,它似乎无法计算
itertools.chain
表达式中的项数,即使它们是固定的

一种解决方案是将范围转换为列表。然而,这种方法无法扩展

有没有办法确保
tqdm
理解链式迭代器

from tqdm import tqdm
import itertools
import time

# shows progress bar
for i in tqdm(range(50, 100, 10)):
    time.sleep(1)
   
# does not know number of items, does not show full progress bar
for i in tqdm(itertools.chain(range(50, 100, 10), range(95, 101))):
    time.sleep(1)
    
# works, but doesn't scale
my_range = [*itertools.chain(range(50, 100, 10), range(95, 101))]    
for i in tqdm(my_range):
    time.sleep(1)

这与其说是一个答案,不如说是一个变通办法,因为它看起来像是
tqdm
现在无法处理它。但是您可以找到链接在一起的两个对象的长度,然后在调用
tqdm
时包含参数
total=

从TQM导入TQM
来自itertools进口链
#我从一份易趣清单开始
iterables=[iterable1,iterable2,…]
#求出每个iterable的长度,然后求和
total_len=总和([len(i)表示可比数中的i])
#然后把它们锁在一起
main_iterable=链(*iterables)
#最后,通过TQM运行它
#确保使用`total=`参数
对于tqdm中的内容(主参数,总计=总计):
#做事