LoginSignup
0
0

More than 3 years have passed since last update.

pythonのfor文は本当に遅い? (今日のPython Day9)

Last updated at Posted at 2021-05-09

0. はじめに

 「Pythonのforループは遅い」とよく(?)言われるそうですが、本当に遅いのか疑問に思いました。もちろん記事を書いている当人が初心者なので複雑なことをしてない(というかできない)だけかもしれません。今回は初心者でもfor文とその処理時間を出力することができる問題を作成しました。最後まで読んでいただけるとありがたいです。

1. 問題

 1から10,000までの整数を1つずつ出力するプログラムを作成してください。また処理の最後に実行時間を出力するようにしてください。なお実行時間を出力する方法が分からない人はヒントを参考にしてください。

2. ヒント

 【Python】処理にかかる時間を計測して表示という記事が分かりやすくよくまとまっているように感じました。この記事を参考に問題を解いてください。

3. 解答例

import time

START_TIME = time.time()
for i in range(1, 100001):
    print(i)
    i += 1
lag = time.time() - START_TIME
print(f"実行時間は{round(lag, 3)}秒です。")

4. 解説

 まず数の出力にはfor文を用いました。今回は1から10,000までの数を出力したかったのでrange()関数の中身(これを引数と言います) は1, 10001としました。range(10000)とすると0から9,999までの数が出力されてしまうからです。次に、先ほど紹介した記事に書かれていたように処理時間は「処理を終えた時間」から「処理を始めた時間」を引くことで求めました。今回の解答例ではそれに加えて処理時間の小数第3位以下を(個人的に)四捨五入したかったのでround()関数を用いました。これはなくても構いません。 
 肝心の処理時間ですが、なんと0.091秒。自分はとてもはやいと思いました。

追記 (2021/05/10)
 @dfghdfdjftyfghvgjhk様がコメントに書いてくださったようにprint()関数にかなり時間がかかっています。自分としては0.505秒も0.016秒もどっちも早いと思ってしまうのですが。
 for文そのものが遅いというよりは複雑な処理を何万回も実行すれば当然のことながら遅くなる(という事を伝えたかった。伝わった?)。

5. まとめ

・自然数を1つずつ表示するにはfor i in range()を用いる。
(↑ただしwhileでも同じことはできます。)
・処理時間は「処理を終えた時間」から「処理を始めた時間」を引いて求める。
・小数の四捨五入にはround()関数を用いる。

6. おまけトーク

 PycharmというIDEを用いると簡単に外部モジュールをimportできるのですが、importする様子を見たいがためにわざわざシェルを使っています。あれってプログラムしている感じがあって個人的には好きなんですよね。私だけですかね?最後まで読んでいただき本当にありがとうございます。

参考文献

【Python】処理にかかる時間を計測して表示

0
0
1

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
0
0