\

Pythonで進捗バーを表示するためのツールであるtqdmは、リスト、タプル、イテレータなどを簡単にラップし、その進行状況を表示できます。しかし、これまでzipenumeratemap関数などを使う場合はプログレスバーを表示するのに工夫が必要でした。

2020年1月25日にリリースされたtqdmのバージョン4.42.0以降では、そういった問題を解決するため、tziptenumeratetmapが導入され、簡単に進捗バーを書けるようになりました。

以下では、これらの関数を使った方法について、従来の方法と合わせて紹介します。

新しい方法

tziptenumeratetmaptqdmのバージョン4.42.0以降で登場し、通常のzipenumeratemapの書き方でプログレスバーを簡単に表示することができます。

# 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))

従来の方法

tziptenumeratetmapを使わずに進捗バーを表示するには、比較的簡単なものに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を活用して、zipenumeratemap関数といった一般的なイテレーション操作に対してプログレスバーを表示する方法を紹介しました。従来の方法では、tqdmを使ってtotal引数にリスト長を指定したり、tqdm(iterable)を使って進捗バーを表示する方法がありましたが、tqdmのバージョン4.42.0以降では、tziptenumeratetmapといった新しい関数が登場し、よりシンプルで直感的な方法でプログレスバーを導入できるようになりました。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です