rfind bug ?

Peter Otten __peter__ at web.de
Wed Apr 21 05:54:50 EDT 2010


Paul Rudin wrote:

> Peter Otten <__peter__ at web.de> writes:
> 
> 
>> OP: you may be looking for
>>
>>>>> a = "a bb ccc"
>>>>> a[::-1].find(" ")
>> 3
> 
> 
> But you should be aware of the effeciency implications of doing
> this. a[::-1] constructs a new list. 

A new string, yes.

> It's probably faster to do e.g.:
> len(a) - a.rfind(..) - 1

Yes, especially if the string is "long":

$ python -m timeit -s'a = "word1 word2 word3"' 'a[::-1].rfind(" ")'
1000000 loops, best of 3: 0.834 usec per loop
$ python -m timeit -s'a = "word1 word2 word3"*100' 'a[::-1].rfind(" ")'
100000 loops, best of 3: 5.04 usec per loop

$ python -m timeit -s'a = "word1 word2 word3"' 'len(a)-a.rfind(" ")-1'
1000000 loops, best of 3: 0.587 usec per loop
$ python -m timeit -s'a = "word1 word2 word3"*100' 'len(a)-a.rfind(" ")-1'
1000000 loops, best of 3: 0.592 usec per loop

But be aware of the following difference:

>>> a[::-1].rfind("not there")
-1

>>> len(a) - a.rfind("not there") -1
8

Peter



More information about the Python-list mailing list