Python:在枚举中查找字符串的最快方法

标签 python string search python-2.7 enumeration

解析了 IANA子标签(参见 Cascaded string split, pythonic way )并列出了 8600 个标签:

tags= ['aa',
       'ab',
       'ae',
       'af',
       'ak',
       'am',
       'an',
       'ar',
       # ...

我想检查例如 mytag="ro" 是否在列表中: 最快的方法是什么:

第一种解决方案:

if mytag in tags:
    print "found"

第二种方案:

if mytag in Set(tags):
    print "found"

第三种解决方案:将列表转换为大字符串,如:'|aa|ab|ae|af|ak|am|an|ar|...' 然后查看字符串是否在另一个字符串中:

tags = '|aa|ab|ae|af|ak|am|an|ar|...'
if mytag in tags:
    print "found"

还有别的办法吗?哪个最快,是否已经测量过,如果不是,我该如何对自己进行基准测试(我应该从列表中随机选择一个元素,还是应该选择最后一个然后测试它,有人可以为“计时器”提供 python 代码)吗?

最佳答案

由于我无法访问原始字符串,因此任何测试都会有偏差。但是,您要了一个计时器?检查timeit模块,旨在为一些代码片段计时。

请注意,如果您使用 IPython%timeit 是一个神奇的函数,可以轻而易举地为函数的执行计时,如下所示。

一些评论

  • 您应该将 Set 替换为 set...
  • 在运行任何测试之前构造您的集合和长字符串
  • 从您的 tags 列表中随机取一个元素确实是可行的方法。

作为在 IPython 中使用 %timeit 的例子:

tags = ['aa','ab','ae','af','ak','an','ar']
tags_set = set(tags)
tags_str = "|".join(tags)

%timeit 'ro' in tags
1000000 loops, best of 3: 223 ns per loop
%timeit 'ro' in tags_set
1000000 loops, best of 3: 73.5 ns per loop
%timeit 'ro' in tags_str
1000000 loops, best of 3: 98.1 ns per loop

关于Python:在枚举中查找字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12637657/

相关文章:

objective-c - 如何不让 NSSearchField 卡住?

ios - 如何根据其中包含的某些值过滤数组

python - 为什么 Pandas 分组聚合会丢弃分类列?

python - Altair:同一图表上的多个 y 轴

c++ - 如何将 vector 转换为字符串并转换回 vector

java - 不进行字符串分割的 URL 解析

java - 修剪 Struts2 文本字段字符串输入

python - (Another) ImportError with Flask under mod_wsgi

python - 如何在 Python 中获取大型复杂参数的 gamma 函数的值?

使用 solr dismax 按单词的一部分搜索