2013-11-27 8 views
5

演算子の速度はPythonでiterableの長さに比例しますか?Python "in"演算子の速度

ので、

len(x) #10 
if(a in x): #lets say this takes time A 
    pass 

len(y) #10000 
if(a in y): #lets say this takes time B 
    pass 

はA> Bか?

答えて

19

での要約:

list - Average: O(n) 
set/dict - Average: O(1), Worst: O(n) 

は詳細についてthisを参照してください。

+0

文字列がdictのキーとして存在するかどうかを確認する必要がある場合。 O(1)が必要です。しかし、文字列がリストに存在するかどうかを確認する必要がある場合は、O(n)を右にしますか? –

+0

、あるいは文字列と文字列のリストを持っていても、xはリストのxよりも速くなりますか? –

+0

平均的にはyesです。 – lennon310

7

aの種類、特にbの種類によって異なります。たとえば、bがリストである場合、yes、inは最悪の場合の時刻であるO(len(b))になります。しかし、例えばbがdictまたはセットである場合、inは、予想ケース時間O(1)(すなわち、一定時間)を要する。

「A> B?」については、AまたはBを定義していません。上記のように、あなたのinステートメントのどちらが速く実行されるのかに関する一般的な答えはありません。