解析了 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/