tqdm进度条在嵌套product的for循环中无法正常显示怎么办?
在嵌套product循环中使用tqdm进度条的解决办法
当然可以用tqdm,你遇到的问题是因为嵌套的product返回的是迭代器,tqdm无法自动获取总迭代次数,导致进度条显示异常。下面是两种可行的解决方式:
方法1:手动指定总迭代次数
先计算出循环的总步数,传给tqdm的total参数,让进度条能正确计算进度:
from itertools import product from tqdm import tqdm # 计算单次product的元素数量 single_count = len(Lm_values) * len(La_values) # 总迭代次数是单次的平方 total_steps = single_count ** 2 for (Lm1, La1), (Lm2, La2) in tqdm( product(product(Lm_values, La_values), product(Lm_values, La_values)), total=total_steps ): # 执行你的循环逻辑 pass
方法2:拆分为双层循环
把嵌套的product拆成两层循环,更直观,也能让tqdm正常工作:
from itertools import product from tqdm import tqdm # 在外层循环添加tqdm for (Lm1, La1) in tqdm(product(Lm_values, La_values), desc="外层迭代"): for (Lm2, La2) in product(Lm_values, La_values): # 执行你的循环逻辑 pass # 或者统计总步数,用tqdm手动更新进度 total_steps = len(Lm_values) * len(La_values) * len(Lm_values) * len(La_values) with tqdm(total=total_steps) as pbar: for (Lm1, La1) in product(Lm_values, La_values): for (Lm2, La2) in product(Lm_values, La_values): # 执行你的循环逻辑 pbar.update(1)
问题根源
itertools.product返回的是迭代器对象,没有内置的长度属性,tqdm无法自动推断总迭代次数,所以进度条无法正常显示进度。通过手动指定total参数,或者调整循环结构让tqdm能识别进度,就能解决这个问题。
内容的提问来源于stack exchange,提问作者grimad
相关产品推荐
相关产品推荐

