Pythonのリストは、内部的にはC言語の配列として表現されています。そのため、リストの先頭要素の追加や削除を行うと、それ以降の要素をすべて移動する必要があり、大きなコストがかかります。したがって、先頭に要素を追加したり削除する必要がある場合は、代わりにcollections.deque
を使用することが推奨されています。
以下に、Pythonのリストにおける主な操作とその計算量を示します。
- 値の参照:リストの特定のインデックスにある値を参照する操作は、計算量が$$O(1)$$です。つまり、リストのサイズに関係なく、一定の時間で実行できます。
- 値の追加:リストの末尾に値を追加する操作も、計算量が$$O(1)$$です。しかし、リストの先頭に値を追加する操作は、計算量が$$O(n)$$となります。これは、リストのすべての要素を移動する必要があるためです。
- 値の削除:リストの末尾の値を削除する操作は、計算量が$$O(1)$$です。しかし、リストの先頭の値を削除する操作は、計算量が$$O(n)$$となります。これも、リストのすべての要素を移動する必要があるためです。
以上の情報から、Pythonのリスト操作の計算量を理解することは、効率的なコードを書くために重要であることがわかります。特に、リストの先頭に対する操作はコストが高いため、このような操作が必要な場合は、collections.deque
などの別のデータ構造を検討することをお勧めします。