现在由于this question,我理解Python中s.find()
和s.index()
之间的区别,我想知道哪种方法更快?
如果我们必须将s.index()
括在try/except
内,那么除了潜在的间接费用之外,速度方面是否有任何显着差异?
答案 0 :(得分:5)
如果我们必须将
s.index()
括在try/except
内,那么除了潜在的间接费用之外,速度方面是否存在显着差异。
至少在(C)Python中,find
,index
,rfind
,rindex
都是内部函数any_find_slice
的包装器。
实施是一样的。唯一的区别是index
和rindex
如果发现调用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 的实现,这应该是不同的。两种方法都做同样的事情,只是在找不到请求的元素时它们的反应方式不同。