5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

tqdmでzip,enumerate,map関数のプログレスバーを簡単に書く方法

Last updated at Posted at 2023-10-03

はじめに

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

2020年1月25日にリリースされたtqdmのバージョン4.42.0以降では、そういった問題を解決するため、tziptenumeratetmapが導入され、簡単に進捗バーを書けるようになりました。この記事では、これらの関数を使った方法について、従来の方法と合わせて紹介します。

新しい方法

tziptenumeratetmapはtqdmのバージョン4.42.0以降で登場し、通常のzipenumeratemapの書き方でプログレスバーを簡単に表示することができます。これらの関数の引数の詳細等は公式ページで紹介されています。

以下ではその書き方の一例を紹介します。

tzipでの表示方法

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での表示方法

tenumerateでの表示方法
from tqdm.contrib import tenumerate
import time

mylist = list(range(10))
for _, _ in tenumerate(mylist):
    time.sleep(0.1)

tmapでの表示方法

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にイテラブルを指定した上で表示する方法などがあります。ここでは、その2つの方法について紹介します。

tqdmでのzipの表示方法

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の表示方法

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の表示方法

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といった新しい関数が登場し、よりシンプルで直感的な方法でプログレスバーを導入できるようになりました。

本記事が、どなたかの役に立てば幸いです。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?