我试图在最后一次出现“+”之后删除字符串末尾的所有字符。例如,如果我的字符串是“Mother+why+is+the+river+laughing”,我想将其简化为“Mother+why+is+the+river”。我不知道字符串会提前是什么。
我想在字符串上向后迭代。就像是:
while letter in my_string[::-1] != '+':
my_string = my_string[:-1]
这不起作用,因为未预先定义输入的字母。
有什么想法吗?
我试图在最后一次出现“+”之后删除字符串末尾的所有字符。例如,如果我的字符串是“Mother+why+is+the+river+laughing”,我想将其简化为“Mother+why+is+the+river”。我不知道字符串会提前是什么。
我想在字符串上向后迭代。就像是:
while letter in my_string[::-1] != '+':
my_string = my_string[:-1]
这不起作用,因为未预先定义输入的字母。
有什么想法吗?
只需使用str.rsplit()
:
my_string = my_string.rsplit('+', 1)[0]
.rsplit()
从字符串的末尾拆分;限制为 1 它只会+
在字符串中的最后一个拆分,并在最后[0]
一个之前为您提供所有内容+
。
演示:
>>> 'Mother+why+is+the+river+laughing'.rsplit('+', 1)[0]
'Mother+why+is+the+river'
如果字符串中没有 +
,则返回原始字符串:
>>> 'Mother'.rsplit('+', 1)[0]
'Mother'
至于你的循环;您正在针对反转的字符串进行测试,并且条件返回True
,直到最后一个+
被删除;您必须在循环中测试您刚刚删除的字符:
while True:
last = my_string[-1]
my_string = my_string[:-1]
if last == '+':
break
但这与使用相比效率很低str.rsplit()
;为删除的每个字符创建一个新字符串的成本很高。