s.find()和s.index()之间哪个更快

时间:2017-03-02 09:32:33

标签: python string python-3.x

现在由于this question,我理解Python中s.find()s.index()之间的区别,我想知道哪种方法更快?

如果我们必须将s.index()括在try/except内,那么除了潜在的间接费用之外,速度方面是否有任何显着差异?

1 个答案:

答案 0 :(得分:5)

  

如果我们必须将s.index()括在try/except内,那么除了潜在的间接费用之外,速度方面是否存在显着差异。

至少在(C)Python中,findindexrfindrindex都是内部函数any_find_slice的包装器。

实施是一样的。唯一的区别是indexrindex如果发现调用ValueError的结果为any_find_slice,则会为您提出-1

如果你继续前进并计时,你会发现它们之间没有明显的区别:

➜  ~ python -m perf timeit -s "s = 'a' * 1000 + 'b'" "s.find('b')"
Median +- std dev: 399 ns +- 7 ns
➜  ~ python -m perf timeit -s "s = 'a' * 1000 + 'b'" "s.index('b')"
Median +- std dev: 396 ns +- 3 ns

我在这里使用perf作为时间安排。

我猜测其他Python 的实现,这应该是不同的。两种方法都做同样的事情,只是在找不到请求的元素时它们的反应方式不同。