pytrthon上的rstrip行为笨拙:'HelloWorld'.rstrip('World')删除'He'之后的所有内容

时间:2017-12-08 10:21:27

标签: python string

我最近开始学习python,并且我遇到了一个使用rstrip的尴尬行为。

我的理解是str.rstrip()会在遇到参数中的一个字符时立即删除所有字符。

>>> a = 'HelloWorld'
>>> a.rstrip('l')
'HelloWorld'
>>> a = 'HelloWorld'
>>> a.rstrip('World')
'He'

我对我得到的结果感到很困惑。

第一个代码不应该产生'他'吗?

6 个答案:

答案 0 :(得分:2)

str.rstrip()从字符串的 end 中删除提供给rstrip()的字符集中的字符(如果已通过,而不是None) 。只要找到字符串中的字符不在剥离字符集中,rstrip()就会停止。

因此,对于第一个示例,字符串a中的最后一个字符是'd',它不在传递给rstrip()的剥离字符集中。因此,没有任何东西从原始字符串中删除。

在第二个示例中,可以从字符串的末尾删除集合'World'中的任何字符。您会注意到子字符串'lloWorld'包含剥离字符中的字符,因此删除了所有这些字符,并留下'He'作为最终结果。

但是,请考虑字符串末尾有一个字符不在集合'World'中的情况,例如一个句号。

>>> 'HelloWorld'.rstrip('World')
'He'
>>> 'HelloWorld.'.rstrip('World')
'HelloWorld.'

没有删除任何内容,因为'.'不在'World'

答案 1 :(得分:1)

[rl]strip方法删除作为参数传递的字符串中的任何字符。由于lo位于'World',因此它们也会被删除。

来自rstrip docs

  

字符串中的字符将从调用此方法的字符串末尾删除。

...不是传递的字符串被剥离,而是它的字符!

答案 2 :(得分:1)

Python中的rstrip()将一组字符作为参数。

如果没有提供参数,则默认为空格。

当且仅当它遇到输入字符串最右侧的字符集中提到的字符时,它才会从右侧开始剥离字符集。

这解释了为什么在第一个示例中没有删除l

在第二个示例中,World与参数中提供的字符集匹配。因此,l中的oHello被删除,因为World中包含lo

这使您获得He这是正确的结果。

答案 3 :(得分:0)

它似乎从右边开始,一旦遇到一个不在作为参数传递的集合中的字符就停止。

答案 4 :(得分:0)

查看documentation

rstrip删除其参数中您修改的字符串右侧的所有字符。所以,自从" lloWorld"都是由#34; World"中的角色组成,那些被删除; e不是,所以它会在那里停止。

另一方面,在第一次通话中,l实际上并不在字符串的右侧(rstrip),因此不会删除任何内容。

答案 5 :(得分:0)

string.rstrip返回删除了尾随字符的字符串副本。

因此,a.rstrip('l')不会改变任何内容,因为'l'不在最后。

但是,a.rstrip('World'),当字符串'World'存在于结尾时,字符串'World'中的所有字符都将从文本中删除。

选中此处以进一步阅读:http://python-reference.readthedocs.io/en/latest/docs/str/rstrip.html