字符串“ c”是最新的项目,为什么不中断?

时间:2019-01-25 12:01:08

标签: python python-3.x string

我认为这段代码应该中断。字符串“ 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,因此它应该断开,但是为什么没有呢?

2 个答案:

答案 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