find('asdf','')
在'asdf'
中找到一个空字符串,因此返回0
。
同样,find('asdf','',3)
开始在索引位置3
搜索字符串,从而返回3
。
由于最后一个索引为3
,find('asdf','',4)
应该返回-1
但它返回4
并且仅在起始索引大于或等于时才开始返回-1
到(last_index)+2
。为什么会这样?
答案 0 :(得分:1)
因为没有前四个字符的"asdf"
仍包含""
。当索引超过字符串的长度时,更难以检查,但索引等于字符串相当于"".find()
。
答案 1 :(得分:1)
以下是它的工作原理:
0 a 1 s 2 d 3 f 4
当您使用'asdf'.find(sub)
时,它会搜索这五个位置,标记为0,1,2,3和4.这五个位置。那五个。不多也不少。它返回第一个'asdf'[pos:pos+len(sub)] == sub
。如果您将start
参数包含在find
中,则会从该位置开始。那个位置。不是一个,不是一个。如果您给出的起始位置大于位置列表中的最大数字,则返回-1。
换句话说,答案是我在评论中已经重复的,引用另一个问题答案:
[ 编辑:似乎你的根本误解与字符串中“位置”的概念有关。 所以当你执行 如果您对此功能的某些使用有实际问题,请继续将其作为单独的问题提出。但你似乎已经知道find
]的最后一个位置是 之后的
find
未返回您希望作为单个单元访问的位置。即使它返回4,也不意味着空字符串处于“at”位置4. find
返回 slice starts 。你应该切片从给定位置开始的字符串。'asdf'.find('', 4)
时,它从位置4开始。它在那里找到空字符串,因为'asdf'[4:4+len('')]==''
。它返回4.这就是它的工作原理。str.find
并不打算将有效索引之间的一对一映射到实际字符串中。是的,您可以执行大量其他索引,例如'asdf'[100:300]
。这与find
无关。您从find
得知的是'asdf'[pos:pos+len(sub)] == sub
。您不知道返回''
的每个可能的索引都将由find
返回,如果您搜索空字符串,也不能保证find返回的数字是字符串中的有效索引find
是如何运作的,所以你不清楚你希望从这个问题中获得什么。