我试图理解为什么以下python代码错误地返回字符串“ dining”:

def remove(somestring, sub):
"""Return somestring with sub removed."""
    location = somestring.find(sub)
    length = len(sub)
    part_before = somestring[:location]
    part_after = somestring[location + length:]
    return part_before + part_after

print remove('ding', 'do')


我意识到使代码正确运行的方法是添加一个if语句,以便如果location变量返回-1,则它只会返回原始字符串(在这种情况下为“ ding”)。例如,代码应为:

def remove(somestring, sub):
"""Return somestring with sub removed."""
    location = somestring.find(sub)
    if location == -1:
        return somestring
    length = len(sub)
    part_before = somestring[:location]
    part_after = somestring[location + length:]
    return part_before + part_after
print remove('ding', 'do')


在不使用if语句修复函数的情况下,part_before变量将返回字符串“ din”。我很想知道为什么会这样。阅读关于string.find的python文档(这最终是part_before公式的方式),我发现位置变量将变为-1,因为未找到“ do”。但是,如果part_before变量包含-1索引之前的所有字母,那么它不应该为空而不是“ din”吗?我在这里想念什么?

作为参考,关于string.find的Python文档指出:

string.find(s, sub[, start[, end]])

返回s中找到子字符串sub的最低索引,以使sub完全包含在s [start:end]中。失败时返回-1。开始和结束以及负值的解释默认值与切片相同。

最佳答案

string = 'ding'
string[:-1]
>>> 'din'


在Python中使用负数作为索引会从右侧返回第n个元素。因此,带有:-1的片返回字符串的最后一个元素以外的所有元素。

关于python - Python中的string.find索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35257443/

10-11 04:17
查看更多