Vin*_*shi 3 python string python-2.7
我正在解决一些竞争性的编码编码挑战.当我在列表中搜索时,我的解决方案超出了时间限制,但是当我在字符串中搜索时被接受.
以下是示例代码:
码
import timeit
list = timeit.Timer("'A' in list('AEIOU')")
set = timeit.Timer("'A' in set('AEIOU')")
string = timeit.Timer("'A' in 'AEIOU'")
print 'List search :',list.timeit(999999)
print 'Set search',set.timeit(999999)
print 'String search',string.timeit(999999)
Run Code Online (Sandbox Code Playgroud)
OUTPUT
List search : 1.0873670578
Set search 1.0083398819
String search 0.0997061729431
Run Code Online (Sandbox Code Playgroud)
*此输出是在ideone.com中获得的... http://ideone.com/5FxkX2
**输出可能因系统而异,但趋势相同.
我发现字符串搜索速度非常快.我用谷歌搜索,但没有找到一个令人满意的推理.请帮我理解为什么字符串搜索最快?
您的测试有失偏颇,您需要使用setup
参数忽视的时间创建的list
或set
>>> timeit.timeit("'A' in l", "l = list('AEIOU')")
0.06389708405846951
>>> timeit.timeit("'A' in s", "s = set('AEIOU')")
0.05960524183085081
>>> timeit.timeit("'A' in s", "s = 'AEIOU'")
0.05756433387793081
Run Code Online (Sandbox Code Playgroud)
话虽如此,in
对str
和的操作list
是线性的O(N)
并且set
是恒定的O(1)
(忽略了大量的哈希冲突).因此,对于一个更大的例子,set
它将是最快的,str
并且list
将非常相似.