我是一个初学者,刚开始学习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
,应该全部删除。
感谢您抽出宝贵时间回答我的问题!
答案 0 :(得分:5)
让我们以您所了解的工作,并带您去了解您不了解的事物。
INPUT: ' spacious '.rstrip()
OUTPUT: ' spacious'
在这里,rstrip()
函数正在获取您的字符串,并从背面删除了所有不需要的字符。 (rstrip
与strip
的不同之处在于rstrip是 reversed (反向),它是从背面开始的。)在这种情况下,您没有传递任何字符串来指示要剥离的内容,因此默认为“所有空白”。因此,它的工作是从字符串的末尾开始,并删除所有空格。一旦碰到非空白,它将立即停止,这就是为什么结果为' spacious'
。
继续前进,这是怎么回事?
INPUT: "AABAA".rstrip("A")
OUTPUT: 'AAB'
在这里,您正在将一个参数传递给rstrip。该字符串是要删除的所有内容的列表。在这种情况下,"A"
告诉它从字符串后面剥离仅个字母A。像前面的示例一样,rstrip 在碰到不需要丢掉的字符后立即停止。因此,它停在“ B”上,就像之前的rstrip停在最右边的字母s
上一样。
那应该使最后一个例子有意义。在这里,
INPUT: "ABCABBA".rstrip("AB")
OUTPUT: 'ABC'
您正在告诉rstrip从字符串中删除任何结尾的A
或B
。这样,在您要删除的第一个字符处停止,在这种情况下为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