为什么.rstrip()有时有效,但有时却无效?

时间:2019-09-27 18:29:04

标签: python string

我是一个初学者,刚开始学习Python。 我在这里阅读了rstrip的文档和其他一些问题,但是对于rstrip的工作原理仍然感到困惑。

我可以理解string.rstrip()的工作方式,例如:

INPUT:      '   spacious   '.rstrip()
OUTPUT:     '   spacious'

也了解这一点:

INPUT:      "ABBA".rstrip("AB") 
OUTPUT:     ''

但请注意以下几点:

INPUT:     "AABAA".rstrip("A")
OUTPUT:    'AAB'

对此有一个疑问,为什么它的输出是AAB而不是B?由于我感觉到字符串开头的AA和字符串结尾的AA都是A

的组合

这也是:

  INPUT:     "ABCABBA".rstrip("AB")
  OUTPUT:    'ABC'

对此有一个疑问,为什么它的输出不是C?我的想法是开头AB,中间AB,结尾BA,应该全部删除。

感谢您抽出宝贵时间回答我的问题!

2 个答案:

答案 0 :(得分:5)

让我们以您所了解的工作,并带您去了解您不了解的事物。

INPUT:      '   spacious   '.rstrip()
OUTPUT:     '   spacious'

在这里,rstrip()函数正在获取您的字符串,并从背面删除了所有不需要的字符。 (rstripstrip的不同之处在于rstrip是 reversed (反向),它是从背面开始的。)在这种情况下,您没有传递任何字符串来指示要剥离的内容,因此默认为“所有空白”。因此,它的工作是从字符串的末尾开始,并删除所有空格。一旦碰到非空白,它将立即停止,这就是为什么结果为' spacious'

继续前进,这是怎么回事?

INPUT:     "AABAA".rstrip("A")
OUTPUT:    'AAB'

在这里,您正在将一个参数传递给rstrip。该字符串是要删除的所有内容的列表。在这种情况下,"A"告诉它从字符串后面剥离个字母A。像前面的示例一样,rstrip 在碰到不需要丢掉的字符后立即停止。因此,它停在“ B”上,就像之前的rstrip停在最右边的字母s上一样。

那应该使最后一个例子有意义。在这里,

INPUT:     "ABCABBA".rstrip("AB")
OUTPUT:    'ABC'

您正在告诉rstrip从字符串中删除任何结尾的AB。这样,在您要删除的第一个字符处停止,在这种情况下为C。像往常一样,一旦停止,它会将所有内容保留在原来的位置。

答案 1 :(得分:2)

要添加到Scott的答案中,关键是在这里:rstrip(CHARS) 只要碰到不在CHARS上的字符就会停止。很少有例子可以更好地说明;假设txt = "banana,,,ssqqqww..."。然后,

print(txt.rstrip(",.qsw")) # 'r' for 'reverse'
# banana

print(txt.rstrip("qws.,")) # ORDER doesn't matter
# banana

print(txt.rstrip("A,.qsw")) # txt is compared against CHAR, not CHAR against txt
# banana

print(txt.rstrip("a,.qsw")) # stops at 'n', doesn't proceed to other 'a's
# banan