1. ホーム
  2. python

[解決済み] リストに値が存在するかどうかを確認する最速の方法

2022-03-20 04:20:30

質問

リスト(何百万もの値を含むリスト)に値が存在するかどうか、またそのインデックスが何であるかを知る最も速い方法は何でしょうか?

この例のように、リスト内のすべての値が一意であることは分かっています。

最初に試した方法は、(私の実際のコードでは3.8秒)です。

a = [4,2,3,1,5,6]

if a.count(7) == 1:
    b=a.index(7)
    "Do something with variable b"

2番目に試した方法は、(2倍速:私の実際のコードでは1.9秒)です。

a = [4,2,3,1,5,6]

try:
    b=a.index(7)
except ValueError:
    "Do nothing"
else:
    "Do something with variable b"

Stack Overflow ユーザーからのメソッド提案 (私の実際のコードで 2.74 秒)。

a = [4,2,3,1,5,6]
if 7 in a:
    a.index(7)

私の実際のコードでは、最初の方法は3.81秒、2番目の方法は1.88秒かかります。 良い改善ではあるのですが

Python/スクリプトの初心者なのですが、同じことをするのにもっと処理時間を短縮できる方法はないのでしょうか?

私のアプリケーションについて、より具体的に説明してください。

Blender APIでは、パーティクルのリストにアクセスすることができます。

particles = [1, 2, 3, 4, etc.]

そこから、パーティクルの位置にアクセスできるんだ。

particles[x].location = [x,y,z]

そして、各パーティクルについて、以下のように各パーティクルの位置を検索して、隣接するパーティクルが存在するかどうかをテストします。

if [x+1,y,z] in particles.location
    "Find the identity of this neighbour particle in x:the particle's index
    in the array"
    particles.index([x+1,y,z])

解決方法は?

7 in a

最も明確で最速の方法。

を使用することも検討できます。 set しかし、リストからそのセットを構築することは、より速いメンバーシップ・テストによって節約されるよりも多くの時間を要するかもしれません。確実な方法は、よくベンチマークを取ることです。(これはまた、あなたが必要とする操作に依存します)