为什么在Python 2.6.5中rfind和find返回相同的值?
我对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]
这个范围内找到的。可选的参数 start 和 end 是按照切片的方式来理解的。如果找不到,返回-1
。
"ab c ab".find("ab")
的结果是 0
,因为最左边的那个 "ab"
是在最左边的位置。
"ab c ab".rfind("ab")
的结果是 5
,因为最右边的那个 "ab"
是从这个索引开始的。