python - 与列表搜索和集合搜索相比,为什么字符串搜索最快?

标签 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)

输出

List search : 1.0873670578
Set search 1.0083398819
String search 0.0997061729431

*此输出是在ideone.com 中获得的... http://ideone.com/5FxkX2
**输出可能因系统而异,但趋势相同。

我发现字符串搜索速度快得令人难以置信。我用谷歌搜索但没有找到令人满意的理由。请帮我理解为什么字符串搜索最快?

最佳答案

您的测试有偏差,您需要使用 setup 参数来忽略 create listset< 的时间

>>> 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

也就是说,strlistin 操作是线性 O(N)set 是常量 O(1)(忽略大量哈希冲突)。因此,对于更大的示例,set 将是最快的,而 strlist 将非常相似。

关于python - 与列表搜索和集合搜索相比,为什么字符串搜索最快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32049350/

相关文章:

python - 使用 var 从函数 A 到函数 B

python - 为什么 Bearer 在请求授权 header 中不起作用?

python - 如何为需要公共(public)参数和特定参数的实现创建公共(public)接口(interface)函数(在Python中)?

python - 将字典中的键同步到列表中的多个值

snprintf 的 C 变量用户提供的格式字符串

javascript - 用python下载网站供离线浏览

python 2.7 用字典中的值替换 raw_input 字符串

python - 在python中启动多个线程

regex - 从字符串中删除除空格以外的特殊字符

C++ - SetUnion 函数的字符串数组参数