我需要在字符串中查找模式,发现我们也可以使用 in 或 find 。谁能建议我哪一个在字符串上会更好/更快。我不需要查找模式的索引,因为 find 也可以返回模式的索引。
temp = "5.9"
temp_1 = "1:5.9"
>>> temp.find(":")
-1
>>> if ":" not in temp:
print "No"
No
我需要在字符串中查找模式,发现我们也可以使用 in 或 find 。谁能建议我哪一个在字符串上会更好/更快。我不需要查找模式的索引,因为 find 也可以返回模式的索引。
temp = "5.9"
temp_1 = "1:5.9"
>>> temp.find(":")
-1
>>> if ":" not in temp:
print "No"
No
使用in
,它更快。
dh@d:~$ python -m timeit 'temp = "1:5.9";temp.find(":")'
10000000 loops, best of 3: 0.139 usec per loop
dh@d:~$ python -m timeit 'temp = "1:5.9";":" in temp'
10000000 loops, best of 3: 0.0412 usec per loop
绝对使用in
. 它是为此目的而制造的,而且速度更快。
str.find()
不应该用于这样的任务。它用于查找字符串中字符的索引,而不是检查字符是否在字符串中。因此,它会慢得多。
如果您正在处理更大的数据,那么您真的希望使用in
最大效率:
$ python -m timeit -s "temp = '1'*10000 + ':' " "temp.find(':') == -1"
100000 loops, best of 3: 9.73 usec per loop
$ python -m timeit -s "temp = '1'*10000 + ':' " "':' not in temp"
100000 loops, best of 3: 9.44 usec per loop
它也更具可读性。
这是关于关键字的文档链接,也是一个相关的问题。
使用 in 会更快,因为使用 in 仅提供模式,而如果您使用 find,它将为您提供模式及其索引,因此与 in 相比,计算字符串的索引需要一些额外的时间。但是,如果您不是处理大数据,那么你使用什么并不重要。