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



我认为这段代码应该被打破。 字符串"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,所以它应该中断,但为什么不呢?

索引

语法mystr[-1]为您提供了mystr的最后一个元素,但这是索引语法的便利。当您使用find()时,您会得到一个从零开始计数的数字,因此在本例中为 2。返回值-1表示未找到

您过度概括了-1约定:它不适用于find。如果是这样,那么在这个例子中,string.find("c")同样可以返回 -1 或 2,因为两者都是正确的。至少可以说,这将是不方便的。

str.find给出一个正整数索引,所以在你的例子中position = 2

首选解决方案是简单地测试字符串的长度:

if position == len(string) - 1:
    # do something

或者,对于负索引,您可以重新定义position

position = string.find('c') - len(string)  # -1

但是,请注意:如果未找到您的角色,str.find返回-1。因此,首先首选正整数是有充分理由的。

有关负索引的工作原理图,请参阅此答案。

最新更新