关于 字符串类型自带方法 切片和 strip() 的踩坑

切片

切片没有方法名,直接就是 x[y:z:v] 的形式,一共有三个参数,x 理所当然就是字符串了,y 和 z 分别代表头和尾,形成了一个切片的区间,v 是步长,和打印列表一个性质,顾头不顾尾。

当然你可以 xyz 都不写,解释器会直接默认是从头到尾,步长为 1 的切片,但是必须要写一个分号,不然就会报错,至于为什么不是两个分号都要写,我的理解是因为原本默认步长就是1了,而且在你写了 x 和 y 的情况下也可以不写步长,这时候解释器会默认为步长为 1,所以当你需求的步长为 1 时,就不用浪费时间去写了。

还有一个从前到后和从后到前的概念,负数就是从后到前的,比如

msg=‘hello world’ 从前到后的字符下标是1.2.3.......从后到前是-1.-2.-3.... 当你从后往前切片的时候,比如msg[ -2 :-5 :v] 注意,这里的v,一定要是负数,因为你的顺序是从后向前的,如果你写了正数,那么你所得到的切片结果将会为空,因为你的步长决定了你的切片方向,正数就是从前往后,这和你的定义切割区间冲突。

为什么会发现这个呢...可能是很无聊吧

移除空白 strip()

这个方法就有点坑了,我感觉并没有什么实质性的大用处。为什么这么说呢,因为他的限制太要命了。

name = '&&&n ick'
print(f"name.strip('&'): {name.strip('&')}")  # strip()默认为‘ ’,并且不修改原值,新创建空间
print(f"name: {name}")

name.strip('&'): n ick
name: &&&n ick

什么意思呢,就是说你在移除了你要移除的字符串里的某些字符只有,这个字符串并没有改变,而是重新开辟了一个空间去存放你进行了移除操作之后的字符串。即两个都存在。

那我为什么要说这个方法坑呢,因为,这个方法它只能移除前后两端的字符啊我曹,就是说一段字符串 “ABABACBAB CADCDCD” 你只能删除前后而且必须要连在一起啊,也就是你只能删除A或者AB或者ABA一直下去。。。和D或DC或DCD一直下去,有毛用啊。。。而且你如果选择就删除一个A,他只会把你开头那个A移除掉,如果屁股也是一个A,也移除掉,其他的全都不动。。。感觉最需要移除的应该是中间的部分啊!坑!

对于 strip()之前有一些误解,现在特地来解释说明一下这个方法的用处

s1 = ' nick handsome '
print(s1.strip()) # 去两端的空白

s2 = '!!!!!nick handsome----'
print(s2.strip('-*!')) # 指定多个字符一起去掉,只要strip里面有的字符就全部干掉
print(s2.strip('nick')) # 指定多个字符一起去掉,只要strip里面有的字符就全部干掉

简单来说 就是你要把一个字符串 ‘abcdefg’ 里的f去掉,这时候能实现吗,只要你的split()方法体内有‘g’就行,什么意思呢,就是 split('fgba') ,最后的输出情况会是 ‘cde’,这说明了什么,只要你能删除你想要删除的那个字符,就证明你这个字符已经在边上了,尼玛还不是等于只能删两头,还是很鸡肋啊!

posted @ 2019-07-30 22:10  chanyuli  阅读(441)  评论(1编辑  收藏  举报