我认为这段代码应该中断。字符串“ abc”中“ c”的正数是-1,因此它应该断开,但是为什么没有呢?
string = "abc"
print(string[-1])
while True:
position = string.find("c")
if position == -1:
break
string = string[:position] + "f" + string[position+len("c"):]
print(string)
我认为这段代码应该中断。字符串“ abc”中“ c”的正数是-1,因此它应该断开,但是为什么没有呢?
答案 0 :(得分:3)
索引语法mystr[-1]
为您提供mystr
的最后一个元素,但这是索引语法的便利之处。使用find()
时,您会得到一个从零开始计数的数字,在这种情况下为2。返回值-1
表示未找到。
您过度概括了-1
约定:它不适用于find
。如果是这样,那么string.find("c")
同样可以在本示例中返回-1或2,因为两者都是正确的。至少可以这样说,这很不方便。
答案 1 :(得分:1)
str.find
给出一个正整数索引,因此在您的示例中为position = 2
。
首选解决方案是仅根据字符串的长度进行测试:
if position == len(string) - 1:
# do something
或者,对于负索引,您可以重新定义position
:
position = string.find('c') - len(string) # -1
但是,要小心:如果找不到您的角色,str.find
返回-1
。因此,有充分的理由为什么首先要使用正整数。
有关负索引的工作原理,请参见this answer。