为何Python的str.rfind指定end为len(str)-1时返回非预期结果?
Python str.rfind() 方法的 end 参数误区解析
你踩的坑在于对str.rfind()的end参数理解错了——它不是最后一个字符的索引,而是搜索范围的「开区间右端点」,官方定义的搜索区间是[start, end),也就是包含start索引的字符,但不包含end索引的字符。
具体到你的测试案例:
你的字符串a = "Autumn's the mellow time"长度是24,字符索引范围是0~23:
- 当调用
a.rfind("e")时,默认参数是start=0,end=len(a)(也就是24),搜索范围覆盖0~23的所有字符,所以能找到最后一个e在索引23的位置,返回23。 - 当你手动传
end=len(a)-1(也就是23)时,搜索范围变成0~22,索引23的e不在这个范围内,只能找到上一个e在索引14的位置,所以返回14。
关于「搜索最后一个字符返回-1」的疑问
同理,如果你要找的字符刚好在索引len(a)-1(也就是23)的位置,而你把end设为len(a)-1(23),搜索范围截止到索引22,自然找不到目标字符,所以返回-1——这是rfind在找不到子串时的标准返回值。
测试代码与输出验证
a = "Autumn's the mellow time" print("Length of a:", len(a)) print(a.rfind("e")) print(a.rfind("e", 0, len(a)-1))
输出:
Length of a: 24 23 14
总结
str.rfind()的默认end参数是字符串的长度len(str),不是len(str)-1- 搜索区间是左闭右开的
[start, end),永远不会包含end索引对应的字符
内容的提问来源于stack exchange,提问作者bowls-pellets
相关产品推荐
相关产品推荐

