Python中的strip()用法及原理解析

对strip输出的疑惑

最近,在使用strip函数时,发现了一个和预想中相差很多的输出。故写此文来探究strip的用法。

challenge = 'thirty days of pythoonnn'
print(challenge.strip('noth'))

我本以为输出的结果会是’thirty days of pythoonnn’(原因是challenge 并不包含’noth’这个子字符串),结果输出的结果却是:

irty days of py

发现无论是按照子字符串(‘noth’),还是按照拆分后的字符(也就是’n’,‘o’,‘t’,‘h’)去移除原字符串中的内容,都没有办法得到上述的输出。

strip用法简介

strip:用于移除字符串头尾指定的字符(默认为空格)或字符序列。
关于strip的用法,最重要的是理解何为字符串头尾,以及要移除的字符序列。头尾是指的由空格或者是其他分隔符分出来的子字符串,还是指的是首位的两个单个字符?字符序列,是按照子字符串的模式去匹配。还是说会将字符序列的每一个字符都拆分?为了探究上述问题,我们可以通过一些代码来进行测试。

字符串头尾的理解

测试代码:

challenge = 'thirty days of pythoonnn'
print(challenge.strip('t'))
### output
hirty days of pythoonnn

观察输出得知,字符串只移除了原索引为0的‘t’字符。并未移除thirty中的第二个‘t’,也未移除’pythoonnn’中的’t’。
所以可以得出结论,字符串头尾指的就是两边的单个字符。
明确了头尾的概念以后,就有一个新的问题出现了。头尾的字符移除了以后还会接着处理吗,还是说单个字符就只会被移除一次?
测试代码

challenge = 'ttthirty days of pythoonnnttt'
print(challenge.strip('t'))
###  output
hirty days of pythoonnn

可以看到开头和末尾的’ttt’都被去除了。由此可以得知字符并不是只会被移除一次,而是会被接着处理,直到遇到第一个非’t’的字符为止。
可以近似的认为去除的过程是:

'ttthirty days of pythoonnnttt'
'tthirty days of pythoonnntt'
'thirty days of pythoonnnt'
'hirty days of pythoonnn'

字符序列的理解

字符序列的匹配模式究竟是拆分后匹配,还是按照子字符串匹配,可以通过下面的代码来进行测试:

challenge = 'thirty days of pythoonnn'
print(challenge.strip('ohtn'))
### output
irty days of py

可以看到,challenge字符串是不包含’ohtn’这个子字符串的,但首尾的’o’,‘h’,‘t’,'n’字符都被移除了。所以可以得出结论,在移除时是按照拆分以后的字符来匹配的,并不是按照整体进行匹配的。

结论

strip 带有参数的时候,这个参数可以理解一个要删除的字符的列表,是否会删除的前提是字符串首尾是否包含要删除的字符,如果有就会继续处理,没有的话是不会删除中间的字符的。
例如

test='aba'
test_strip=test.strip('b')
print(test_strip)
### output
aba

是否修改原字符串

需要注意的是,strip不会改变原始字符串,而是返回一个新的字符串。因此,我们可以安全地使用返回的结果而不会影响原始数据。

test='aba'
test_strip=test.strip('a')
print(test_strip)
### output
b
print(test)
### output
aba

不填参数的情况

strip默认用于移除字符串开头和结尾的空白字符(包括空格、制表符、换行符等)。

test='  Hello World  '
print(test.strip())
### output
Hello World
print(test)
  Hello World

对比两个输出,可以看出字符串首尾的空格均被移除了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值