You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:38:19