0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python 大量リストから一意なデータを高速に取得する方法

Posted at

Python 大量リストから一意なデータを高速に取得する方法

はじめに

Pythonで大量のリストから一意なIDを基準にデータを取得する際、
データ量が増えるとパフォーマンスが大きく低下することがあります。
そのような課題を解決した方法を記載します。

課題

例えば、以下のように一意なIDを条件にリストを絞り込むコードでは、
大量データの場合にパフォーマンスが大きく低下することがあります。

target_id = "{id}"

results = [] # 対象リスト
result = [x for x in results if x.id == target_id]

リスト内のすべての要素をチェックするため、サイズが大きいほど処理時間が長くなります。

解決策①: リストの形式を変更できない場合

リストの形式を変更できない場合、nextを使用すれば効率的に最初の一致するデータを取得できます。

result = next((x for x in results if x.id == target_id), None)
  • 条件に一致する最初の要素だけを返すため、無駄なループを削減できます
  • 条件に一致するデータがない場合は None を返します

解決策②: リストデータを辞書形式に変換できる場合

リストデータを辞書形式に変換できる場合、一意なIDをキーにすることで、
パフォーマンスを大幅に向上させることができます。

# 辞書型に変換
results_dict = {x.id: x for x in results}
# 辞書型からデータを取得
result = results_dict.get(target_id)
  • 辞書型の検索はキーアクセスで行われるため、リスト検索に比べてパフォーマンスが向上します
  • 辞書化自体のコストはありますが、同じリストデータに対して複数回検索を行う場合はパフォーマンスが向上します

結果

リストデータ数やループ回数の詳細は失念しましたが、以下のようなパフォーマンスの改善を確認しました。

  • 解決案②
    • 適用前:0.7秒
    • 適用後:0.0015秒

この方法を活用することで、一意なIDを持つリストの取得パフォーマンスを向上させることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?