わずか 85 項目の場合、正直なところ、使用したいほとんどすべての方法で十分な速度が得られます。時期尚早に最適化しないでください。
とはいえ、実際に何をしているかによっては、 alist
は a よりも速い場合がありdeque
ます。Adeque
はどちらかの端でアイテムを追加および削除するのに高速ですが、スライスはサポートされていません。
リストを使用して、連続する範囲のアイテム (たとえば最初の 42 個) をコピーまたは削除する場合は、スライスを使用してこれを行うことができます。各パスでリストの半分が削除されると仮定すると、アイテムを新しいリストにコピーするのは、既存のリストからアイテムを削除するよりも平均して遅くなります (削除するには、削除されていないリストの半分をメモリ内で「左方向」に移動する必要があります。残りの半分をコピーするのとほぼ同じ時間コストがかかりますが、常にこれを行う必要はありません; リストの後半を削除しても何も移動する必要はありません)。
これをdeque
効率的に行うにはpop()
、popleft()
アイテムをスライスするのではなく (多数の属性アクセスとメソッド呼び出しがあり、Python では比較的コストがかかります)、操作を制御するループを Python で記述する必要があります。これは、ネイティブのスライス操作よりも遅くなります。
基本的にバイナリ検索だとおっしゃっていたので、元のコンテナをまったく変更せずに保持したいアイテムを見つけて、その単一のアイテムを保持する新しいコンテナを返すのがおそらく最も速いでしょう。インデックスによってアイテムに多くのアクセスを行うためlist
、これは a よりも高速になります。deque
a でこれを行うにはdeque
、アイテムにアクセスするたびに Python がリンクされたリストを最初からたどる必要がありますが、インデックスによるアイテムへのアクセスは a の単純で高速な計算ですlist
。