为什么找到空字符串返回0?

时间:2018-01-19 23:51:03

标签: python string

我试图弄清楚Python中的字符串问题。 所以这是来自在线课程Building A Search Engine,在测验中有一个问题:

对于任何字符串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)&amp; (e)中

我非常确定除了选择(d)之外的其他选择。

我认为输出应为-1,但输出为0

output

所以我的推理如下:

s之前是预定义的问题,但''应被视为空字符串。所以在一个字符串中找到一个空字符串,为什么返回不是-1,因为你在任何字符串中找不到空。

============================================== < / p>

好的,我可以看到我错误的想法。

documentation

  

空字符串始终被视为任何其他字符串的子字符串,因此&#34;&#34; in&#34; abc&#34;将返回True

1 个答案:

答案 0 :(得分:2)

正如string.find(s, sub[, start[, end]])文件所说:

  

返回s中找到子字符串sub的最低索引,以便sub完全包含s[start:end]

Python解释器执行搜索的方式是从字符串的start索引中查找子字符串,直到end索引。

它迭代并将您的子字符串比较为:

your_string[i:i+len(substring)]
# where `i` is the index

对于您的情况,您的子字符串长度为0,并且在结尾处使用0索引进行字符串切片时,它返回空字符串。例如:

>>> your_string = 'abcd'
>>> your_string[0:0]
''

因此,当您使用空字符串执行str.find时,您得到的结果为0

>>> your_string.find('')
0

# Because your_string[0:0] == ''
#                     ^  this being the index returned