2013-11-27 73 views
5

in运算符的运行速度与python的长度成正比吗?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

所以如果我需要检查一个字符串是否存在作为一个字典中的键。那么它将花费O(1)。但如果我需要查看一个字符串是否出现在列表中,那么O(n)是正确的? –

+0

或者即使我有一组字符串和一个字符串列表,set中的x将比list中的x更快? –

+0

平均情况是。 – lennon310

7

对此没有一般的答案:它取决于a,特别是b的类型。例如,如果b是列表,那么是的,in需要最坏情况时间O(len(b))。但是,例如,如果b是字典或集合,则in取预期时间时间O(1)(即,恒定时间)。

关于“是A> B?”,您没有定义AB。如上所述,您的in哪个语句运行得更快没有一般答案。