皆さんこんにちは!
えー。今回はPythonに関しての記事です。
自分の書いているロジックでリストの結合でだいぶ処理が遅くなっている箇所があったので。。
それについて検証した内容について書きます!
環境
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# python --version
Python 3.9.1
リスト同士の結合の速さ比較
リスト同士を結合するために、どの方法が一番よいのかをはっきりさせたく。。
以下のものを比較しました。
- +演算子
- extend
- append
数値のみを含む長さ10のリストを用意し、それを1000/10000/100000回ループを回して、それぞれの演算でどのくらい時間がかかるのかをだしています。
以下のソースコードを使用して計算速度を計測してみました。
from typing import Callable
from datetime import datetime
TEST_LIST = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
TEST_LOOP_COUNT = 1000 # => 10000, 100000
def test01() -> None:
new_list = []
for i in range(TEST_LOOP_COUNT):
new_list = new_list + TEST_LIST
def test02() -> None:
new_list = []
for i in range(TEST_LOOP_COUNT):
new_list.extend(TEST_LIST)
def test03() -> None:
new_list = []
for i in range(TEST_LOOP_COUNT):
for number in TEST_LIST:
new_list.append(number)
def do_test(func: Callable, title: str) -> None:
s_time = datetime.now()
func()
e_time = datetime.now()
print(f"{title} time:\t{e_time - s_time}")
# test01
do_test(test01, "+operator")
# test02
do_test(test02, "extend")
# test03
do_test(test03, "append")
結果
以下のような結果になりました。
縦:結合方法, 横:リスト要素数
10,000 | 100,000 | 1,000,000 | |
extend | 0:00:00.000059 | 0:00:00.000653 | 0:00:00.008281 |
append | 0:00:00.000377 | 0:00:00.003259 | 0:00:00.037516 |
+演算子 | 0:00:00.008705 | 0:00:00.675780 | 測定不能(※) |
結論としては、extendが圧倒的に早いですね。
この結果からリスト同士を結合させる場合は、extendを使っておけば特に問題なさそうです!
(※) 30秒まっても結果が返ってこなかったので、測定不能と書いています。
ではでは!
よいpythonライフを!