両方とも「範囲検索」に使えますが、対象データの規模や用途によって使い分けるのがポイントです。
bisect の範囲検索
- 対象: ソート済みの Python リスト
- 仕組み:
bisect_leftとbisect_rightで範囲のインデックスを求め、スライスで抽出 - 計算量: O(log n) でインデックスを求め、抽出は O(k)(k は範囲の要素数)
- メリット:
- 標準ライブラリだけで軽量・高速
- 小規模データや単純な検索に向いている
- デメリット:
- リストがソート済みである必要がある
- データにラベルや複雑な構造がある場合は扱いにくい
pandas の範囲検索
- 対象: DataFrame(表形式データ)
- 仕組み:
betweenやブールインデックスで条件を指定して抽出 - 計算量: 内部的にはベクトル演算で効率的(C実装)
- メリット:
- 日時や数値の範囲検索を直感的に書ける
- 複数列の条件を組み合わせやすい
- 大規模データでも効率的に処理可能
- デメリット:
- pandas をインポートする必要がある(やや重い)
- 小規模データではオーバーエンジニアリングになりがち
使い分けの目安
| 項目 | bisect | pandas |
|---|---|---|
| データ構造 | ソート済みリスト | 表形式(DataFrame) |
| データ規模 | 小〜中規模 | 中〜大規模 |
| 検索対象 | 単一の値や範囲 | 複数列・複雑条件 |
| 速度 | 軽量・高速 | ベクトル演算で効率的 |
| 可読性 | ややコード量が増える | between で直感的に書ける |
まとめ
- bisect: 軽量でシンプル。ソート済みリストから範囲を抜き出すだけなら最適。
- pandas: 大規模データや複雑な条件検索に強い。ログ解析や時系列データ処理に便利。
👉 小規模・単純検索 → bisect
👉 大規模・複雑検索 → pandas

