Pythonで進捗バーを表示するためのツールであるtqdm
は、リスト、タプル、イテレータなどを簡単にラップし、その進行状況を表示できます。しかし、これまでzip
、enumerate
、map
関数などを使う場合はプログレスバーを表示するのに工夫が必要でした。
2020年1月25日にリリースされたtqdm
のバージョン4.42.0以降では、そういった問題を解決するため、tzip
、tenumerate
、tmap
が導入され、簡単に進捗バーを書けるようになりました。
以下では、これらの関数を使った方法について、従来の方法と合わせて紹介します。
新しい方法
tzip
、tenumerate
、tmap
はtqdm
のバージョン4.42.0以降で登場し、通常のzip
、enumerate
、map
の書き方でプログレスバーを簡単に表示することができます。
# tzipでの表示方法
from tqdm.contrib import tzip
import time
mylist_a = list(range(10))
mylist_b = list(range(10))
for _, _ in tzip(mylist_a, mylist_b):
time.sleep(0.1)
# tenumerateでの表示方法
from tqdm.contrib import tenumerate
import time
mylist = list(range(10))
for _, _ in tenumerate(mylist):
time.sleep(0.1)
# tmapでの表示方法
from tqdm.contrib import tmap
import time
def myfunc(x):
time.sleep(0.1)
return x*2
mylist = list(range(10))
result = list(tmap(myfunc, mylist))
従来の方法
tzip
、tenumerate
、tmap
を使わずに進捗バーを表示するには、比較的簡単なものにtqdm
の引数total
にリスト長を指定する方法やtqdm
にイテラブルを指定した上で表示する方法などがあります。
# tqdmでのzipの表示方法
from tqdm import tqdm
import time
mylist_a = list(range(10))
mylist_b = list(range(10))
# 方法1: tqdmのtotal引数にリスト長を指定して表示
for _, _ in tqdm(zip(mylist_a, mylist_b), total=len(mylist_a)):
time.sleep(0.1)
# 方法2: tqdm(iterable)を使って表示
for _, _ in zip(tqdm(mylist_a), mylist_b):
time.sleep(0.1)
# tqdmでのenumerateの表示方法
from tqdm import tqdm
import time
mylist = list(range(10))
# 方法1: tqdmのtotal引数にリスト長を指定して表示
for _, _ in tqdm(enumerate(mylist), total=len(mylist)):
time.sleep(0.1)
# 方法2: tqdm(iterable)を使って表示
for _, _ in enumerate(tqdm(mylist)):
time.sleep(0.1)
# tqdmでのmapの表示方法
from tqdm import tqdm
import time
def myfunc(x):
time.sleep(0.1)
return x*2
mylist = list(range(10))
# 方法1: tqdmのtotal引数にリスト長を指定して表示
result = list(tqdm(map(myfunc, mylist), total=len(mylist)))
# 方法2: tqdm(iterable)を使って表示
result = list(map(myfunc, tqdm(mylist)))
この記事では、Pythonの進捗バー表示ツールであるtqdm
を活用して、zip
、enumerate
、map
関数といった一般的なイテレーション操作に対してプログレスバーを表示する方法を紹介しました。従来の方法では、tqdm
を使ってtotal
引数にリスト長を指定したり、tqdm(iterable)
を使って進捗バーを表示する方法がありましたが、tqdm
のバージョン4.42.0以降では、tzip
、tenumerate
、tmap
といった新しい関数が登場し、よりシンプルで直感的な方法でプログレスバーを導入できるようになりました。