我最近开始学习python,并且我遇到了一个使用rstrip的尴尬行为。
我的理解是str.rstrip()会在遇到参数中的一个字符时立即删除所有字符。
>>> a = 'HelloWorld'
>>> a.rstrip('l')
'HelloWorld'
>>> a = 'HelloWorld'
>>> a.rstrip('World')
'He'
我对我得到的结果感到很困惑。
第一个代码不应该产生'他'吗?
答案 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
方法删除作为参数传递的字符串中的任何字符。由于l
和o
位于'World'
,因此它们也会被删除。
来自rstrip docs:
字符串中的字符将从调用此方法的字符串末尾删除。
...不是传递的字符串被剥离,而是它的字符!
答案 2 :(得分:1)
Python中的rstrip()
将一组字符作为参数。
如果没有提供参数,则默认为空格。
当且仅当它遇到输入字符串最右侧的字符集中提到的字符时,它才会从右侧开始剥离字符集。
这解释了为什么在第一个示例中没有删除l
。
在第二个示例中,World
与参数中提供的字符集匹配。因此,l
中的o
和Hello
被删除,因为World
中包含l
和o
这使您获得He
这是正确的结果。
答案 3 :(得分:0)
它似乎从右边开始,一旦遇到一个不在作为参数传递的集合中的字符就停止。
答案 4 :(得分:0)
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