为什么在Python 2.6.5中rfind和find返回相同的值?

11 投票
3 回答
14656 浏览
提问于 2025-04-16 21:24

我对Python还比较陌生,最近遇到了一些问题。简单来说,当我在一个字符串上调用 str.rfind("test") 时,输出的结果和 str.find("test") 是一样的。为了让你更明白,我给你举个例子:

Python 2.6.5 (r265:79063, May  6 2011, 17:25:59) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> line = "hello what's up"
>>> line.rfind("what")
6
>>> line.find("what")
6

根据我的理解,line.find 的值是正确的,但 line.rfind 的值应该是 9。我是不是对这两个函数理解错了,或者使用得不对呢?

3 个回答

3

为了更好地理解 .rfind 的用途,可以试着用一个像 "hello what's up, hello what's up" 这样的字符串来做例子(也就是说,里面有多个 "what" 的出现)

6

find() 方法会返回第一个匹配项的位置索引。而 rfind 方法则会返回最后一个匹配项的位置。你可以通过尝试匹配重复的情况来更好地理解这两者的区别。

看看这个例子:
       >>> string='hey! how are you harish'
       >>>string.find('h')
       >>>0                #it matched for first 'h' in the string
       >>> string.rfind('h')    
           22             #it matched for the last 'h' in the string
27

我觉得你可能以为 rfind 会返回第一个匹配到的 "what" 字符的最右边的索引。其实它返回的是最后一个匹配到的 "what" 字符的最左边的索引。引用一下官方文档

str.rfind(sub[, start[, end]])

返回字符串中子串 sub 出现的最高索引,也就是说 sub 是在 s[start:end] 这个范围内找到的。可选的参数 startend 是按照切片的方式来理解的。如果找不到,返回 -1

"ab c ab".find("ab") 的结果是 0,因为最左边的那个 "ab" 是在最左边的位置。
"ab c ab".rfind("ab") 的结果是 5,因为最右边的那个 "ab" 是从这个索引开始的。

撰写回答