Python | bisect を使って日時データから範囲検索する方法

Python
スポンサーリンク

bisect はソート済みリストに対して高速に範囲検索ができます。日時データ(ログのタイムスタンプなど)を扱う場合も同じ考え方で使えます。


基本の流れ

  1. 日時データをソート済みリストにする(昇順が前提)
  2. 検索範囲の開始時刻と終了時刻を指定
  3. bisect_leftbisect_right で範囲のインデックスを取得
  4. スライスで対象範囲を抽出

具体例

import bisect
from datetime import datetime

# ログのタイムスタンプ(昇順にソート済み)
logs = [
    datetime(2025, 11, 29, 9, 0),
    datetime(2025, 11, 29, 9, 30),
    datetime(2025, 11, 29, 10, 0),
    datetime(2025, 11, 29, 10, 30),
    datetime(2025, 11, 29, 11, 0),
    datetime(2025, 11, 29, 11, 30),
]

# 検索範囲(10:00〜11:00)
start_time = datetime(2025, 11, 29, 10, 0)
end_time   = datetime(2025, 11, 29, 11, 0)

# 範囲のインデックスを取得
start_index = bisect.bisect_left(logs, start_time)
end_index   = bisect.bisect_right(logs, end_time)

# 範囲抽出
subset = logs[start_index:end_index]

print("対象範囲のログ:")
for log in subset:
    print(log.strftime("%Y-%m-%d %H:%M"))
Python

実行結果

対象範囲のログ:
2025-11-29 10:00
2025-11-29 10:30
2025-11-29 11:00

応用例

  • ログ解析: 特定時間帯のエラーやイベントを抽出
  • センサー記録: 一日の中で特定時間帯のデータを取り出す
  • 金融データ: 株価や取引履歴から時間範囲を抽出

まとめ

  • bisect_leftbisect_right を使えば、日時データの範囲検索が高速にできる
  • ソート済みリストが前提
  • 大規模ログ解析や時系列データ処理に非常に便利
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました