Python:List(リスト)結合の速さ比較

pythonWeb開発

皆さんこんにちは!

えー。今回は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,000100,0001,000,000
extend0:00:00.0000590:00:00.0006530:00:00.008281
append0:00:00.0003770:00:00.0032590:00:00.037516
+演算子0:00:00.0087050:00:00.675780測定不能(※)
処理速度

結論としては、extendが圧倒的に早いですね。

この結果からリスト同士を結合させる場合は、extendを使っておけば特に問題なさそうです!

(※) 30秒まっても結果が返ってこなかったので、測定不能と書いています。

ではでは!

よいpythonライフを!

タイトルとURLをコピーしました