需要了解string.count()函数的功能

NIl*_*rma 0 python string conceptual concept

我试图理解string.count的功能基本上它的文档定义是

string.count(s,sub [,start [,end]])
返回字符串s [start:end]中substring sub的(非重叠)出现次数.开始和结束的默认值以及负值的解释与切片的默认 值相同.

现在最后一行的确切含义实际上是大胆的.我做了一些关于这个函数的随机实验

In [19]: a
Out[19]: 'ab'
In [23]: string.count(a,'ab'[1:3])
Out[23]: 1

In [24]: string.count(a,'ab'[1:1])
Out[24]: 3

In [25]: string.count(a,'ab'[-1:1])
Out[25]: 3

In [26]: string.count(a,'ab'[-1:0])
Out[26]: 3

In [27]: string.count(a,'ab'[1:4])
Out[27]: 1

In [28]: string.count(a,'ab'[1:100])
Out[28]: 1

In [29]: string.count(a,'ab'[100:100])
Out[29]: 3

In [30]: string.count(a,'ab'[:])
Out[30]: 1

In [31]: string.count(a,'a'[:])
Out[31]: 1
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我为什么有时候我得到的结果是1,为什么有时候3这里.总的来说,我需要了解这个功能是如何工作的?

Sve*_*ach 5

每当你看到一个3结果时,第二个参数是空字符串 - 你通过使用奇怪的切片隐藏这个facte.空字符串被认为是在位置出现0:0,1:12:2在这个例子中,所以有三个事件.通常,string.count(s, "")(或等效地s.count(""))将返回len(s) + 1.

为了解释这个结果是如何产生的,这里是一个(不是非常有效的)示例实现string.count():

def count(s, sub):
    result = 0
    for i in range(len(s) + 1 - len(sub)):
        result += (s[i:i + len(sub)] == sub)
    return result
Run Code Online (Sandbox Code Playgroud)