From: Chris Rebert on
On Wed, Apr 21, 2010 at 3:33 AM, Alf P. Steinbach <alfps(a)start.no> wrote:
> * Chris Rebert:
>> On Wed, Apr 21, 2010 at 2:59 AM, Stef Mientki <stef.mientki(a)gmail.com>
>> wrote:
>>> On 21-04-2010 10:56, Chris Rebert wrote:
>>>> On Wed, Apr 21, 2010 at 1:51 AM, Stef Mientki <stef.mientki(a)gmail.com>
>>>> wrote:
>>>>>
>>>>> With the following code, I would expect a result of 5 !!
>>>>>
>>>>>>>> a= 'word1 word2 word3'
>>>>>>>> a.rfind(' ',7)
>>>>>>>>
>>>>> 11
>>>>>
>>>>> Is this a bug ?
>>>>>
>>>> No. Don't you think someone would have found such an obvious bug by now?
>>>>
>>> if it's not a bug,
>>> then the start index has no meaning ...
>>> ... and some would call that a bug.
>>
>> Ah, I neglected to take your use of .rfind()'s second parameter into
>> account!
>>
>> As can be interpolated from the part of the docs James quotes:
>> s.rfind(' ', 7) === s[7:].rfind(' ') + 7 # overlooking the 'not present'
>> case
>>
>> That is, the second parameter to .rfind(), namely `start`, is relative
>> to the *left* end of the string, not the right end. I can see how this
>> might be unintuitive, but it does make the API more uniform.
>
> It seems that the OP also thought it was relative to the left end of the
> string.

It really doesn't help that the example in question is kinda lousy
(particularly, it's symmetrical with respect to whitespace and has
only 2 spaces).
Case in point, my misinterpretation of the OP's misinterpretation
(i.e. having the indexing of `start` be relative to the end of the
string) still plausibly explains his confusion.

Cheers,
Chris
--
Excellent catch.
*Considers getting Alien Life-Form merch*

> The difference is what it signifies: start of search, or end of search.
>
> With rfind the "start" parameter signifies the end of the search, and
> conversely, the third parameter "end" signifies where the search starts. :-)