【问题标题】:Why does finding empty string return 0? [duplicate]为什么查找空字符串返回0? [复制]
【发布时间】:2018-06-29 06:54:07
【问题描述】:

我正在尝试找出 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) & (e)

我很确定除了选项 (d) 之外的其他选项。

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

所以我的推理如下:

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

===============================================

好吧,我可以看出我的错误想法了。

documentation

空字符串总是被认为是任何其他字符串的子字符串,因此“abc”中的“”将返回True

【问题讨论】:

  • 空字符串是任意字符串的子集,就像空集是任意集合的子集一样。此外,任何字符串都以空字符串开头。这就是为什么。
  • “你在任何字符串中都找不到空” 当然可以。你可以在任何地方找到它。

标签: python string


【解决方案1】:

正如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 长度,并且在字符串切片末尾带有0th 索引,它返回空字符串。例如:

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

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

>>> your_string.find('')
0

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

【讨论】:

  • 感谢您的分类。现在我明白了,find 与字符串的循环一起工作。
猜你喜欢
  • 2015-02-24
  • 2013-04-09
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多