22

我需要在字符串中查找模式,发现我们也可以使用 in 或 find 。谁能建议我哪一个在字符串上会更好/更快。我不需要查找模式的索引,因为 find 也可以返回模式的索引。

temp = "5.9"
temp_1 = "1:5.9"
>>> temp.find(":")
-1
>>> if ":" not in temp:
    print "No"

No 
4

3 回答 3

44

使用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
于 2013-08-26T06:24:18.033 回答
11

绝对使用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

它也更具可读性。

这是关于关键字的文档链接,也是一个相关的问题

于 2013-08-26T06:22:06.313 回答
3

使用 in 会更快,因为使用 in 仅提供模式,而如果您使用 find,它将为您提供模式及其索引,因此与 in 相比,计算字符串的索引需要一些额外的时间。但是,如果您不是处理大数据,那么你使用什么并不重要。

于 2013-08-26T06:28:45.500 回答