Python中调用s.find('')返回0的原因咨询
Python字符串
find()方法的空字符串匹配疑问 我最近在做在线课程《Building A Search Engine》的测验时,遇到了一个关于Python字符串find()方法的问题,一开始对其中一个选项特别困惑,现在搞清楚了,来梳理一下:
测验题目
对于任意字符串
s = '<any string>',以下哪项结果恒为0?
(a)s.find(s)
(b)s.find('s')
(c)'s'.find('s')
(d)s.find('')
(e)s.find(s+'!!!')+1
正确答案
正确选项是 (a)、(c)、(d)和(e)
我的疑问与解惑
其他选项我一开始都能确定,但对(d)选项s.find('')完全摸不着头脑——我原以为空字符串''根本不算任何字符串的子串,应该返回-1,但实际运行不管是什么字符串,这个表达式都返回0。
后来我查了Python的官方说明才明白:空字符串始终被视为任何其他字符串的子串,而且find()方法默认会匹配字符串的起始位置(索引0)。举几个实际测试的例子:
"hello".find('')返回0"" in "test"返回True- 甚至空字符串自身调用
"".find('')也会返回0,因为空字符串本身就包含空字符串
补充其他选项的验证
为了更清晰,再简单说下其他正确选项的逻辑:
- (a)
s.find(s):任何字符串本身都是自己的子串,起始索引必然是0,所以结果恒为0 - (c)
's'.find('s'):和(a)同理,单个字符的字符串查找自身,返回起始索引0 - (e)
s.find(s+'!!!'):s+'!!!'是在原字符串后追加了新内容,肯定不是s的子串,所以find()返回-1,加1之后结果就是0,恒成立
内容的提问来源于stack exchange,提问作者sikisis
相关产品推荐
相关产品推荐

