[解決済み] リストよりセットの方が速いのはなぜか?
2023-01-18 11:17:13
質問
Pythonのwikiによると、"集合や辞書を使ったメンバシップテストは配列を検索するO(n)よりもずっと速く、O(1)です。a in b"をテストするとき、bはリストまたはタプルではなく、セットまたはディクショナリでなければなりません。
私は自分のコードで速度が重要なときはいつでもリストの代わりにセットを使用してきましたが、最近、なぜセットがリストよりはるかに速いのか不思議に思っています。誰かが説明するか、または説明するソースに私を指して、正確にセットをより速くするためにpythonの舞台裏で何が起こっているのでしょうか?
どのように解決するのですか?
セットの実装は
ハッシュテーブル
. オブジェクトをセットに追加すると、そのオブジェクトのメモリ内での位置が
set
オブジェクトのメモリ内での位置は、追加されるオブジェクトのハッシュを使用して決定されます。 メンバシップのテストでは、基本的にそのハッシュで決められた位置にオブジェクトがあるかどうかを調べるだけなので、この処理の速さはセットのサイズに依存しない。 これに対してリストの場合は、リスト全体を検索する必要があり、リストが大きくなるにつれて遅くなる。
これは、セットが追加したオブジェクトの順序を保持しない理由でもあります。
メンバシップテストはセットでは速く、要素の削除も速いです。 これらの操作を必要としない限り、リストの方が速いことが多いのです。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] 2つのリストの差を取得する
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】PyPyが6.3倍速いなら、CPythonよりPyPyを使うべきじゃないのか?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] Pythonの辞書にあるスレッドセーフについて