我试图理解为什么以下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/