6、Python之字符串拓展

Python入门 / 2020-09-10

这次主题是字符串类型的知识拓展。

1、字符串定义:

字符串类型是指引号里边的所有内容都被视作一个不可分割的整体:字符串;就算你曾经是一个列表或字典,只要两边加上引号,就成了一个字符串。

2、字符串索引:

其实呢,字符串跟列表等一样,也是拥有索引的!只是索引不太一样,如下所示:

>>> sanxi="good afternoon"
>>> print(sanxi[0])
g
>>> print(sanxi[1])
o
>>> print(sanxi[1])
o
#注意,4号索引即字符串good和afternoon中间的空格,空格也是字符串!

由上可知,字符串的索引是从左到右,一个字符对应一个索引,从0号位置开始!

正反取值,反向是从-1开始,不能改

3、索引的拓展

3.1、拷贝小字符串

​ 即从一个大的字符串中拷贝出一个小的字符串,只需要写出索引范围即可!注意:拷贝意味着新建内存空间而不是改动原值!

>>> sanxi='hello,chrystal'
>>> sanxi[0:5]
'hello'
#Python有始无终需要记住哈!5号对应的是索引号4!
3.1.1、拷贝时指定步长

​ 默认步长为1哈!

>>> sanxi[0:5:2]
'hlo'
3.1.2、反向拷贝
>>> sanxi[5:0:-1]
',olle'
#注意,这里的5是索引号5,即第6个字符串逗号,有始无终+1.
3.2、拷贝字符串

​ 类似上面,只是这个拷贝是整个字符串!

>>> sanxi='hello,chrystal'
>>> love=sanxi[:]
>>> print(love)
hello,chrystal
3.2.1、反向拷贝
>>> love=sanxi[::-1]
>>> print(love)
latsyrhc,olleh

​ 为什么正向一个冒号,我反向就得两个冒号?我不服!

​ 兄dei啊!都说了因为Python默认字符串类型步长为1,所以就可以省略一个冒号啊,当然你非得写两个冒号一点问题也没有!

4、统计字符串:len

​ 统计字符串的字符数量

>>> len(love)
14

5、移除符号:strip

​ 移除字符串左右两侧的符号,只需要在strip指定需要移除的符号即可!不指定则默认移除空白字符。

>>> sanxi='  haha '
>>> sanxi.strip()
'haha'
>>> sanxi
'  haha '

注意,字符串类型是不可改变类型的,所以这些操作都是新辟内存空间填入处理后的结果而不是改动原值!

还有个lsrip仅去左边,rstrip仅去右边

​ 还需要了解的是strip仅移除字符左右两边的符号,不动中间的值。

>>> sanxi='&&**6 6 6*&&*&'
>>> sanxi.strip('*&')
'6 6 6'

​ 其实是因为strip首先从左开始移除指定符号,当遇到字符时,停止操作;开始从右边倒过来移除符号,遇到字符时,停止操作!简直就是见风使舵!

6、切分字符串:split

​ 把一个字符串按照指定分隔符进行切分,从而得到一个列表;不指定则默认按照空格分隔

>>> sanxi='hello,chrystal'
>>> sanxi.split(',',1)
['hello', 'chrystal']
#指定分隔符号后面跟数字代表分隔几次,比如说里面逗号隔开的有3个字符,写2则代表仅分隔前两个,第三个不分!

7、字符串大小写转换

7.1、lower

​ 大写字母全改成小写

>>> sanxi='Hello,Chrystal'
>>> sanxi.lower()
'hello,chrystal'
7.2、upper

​ 小写字母全改成大写

>>> sanxi='hello,chrystal'
>>> sanxi.upper()
'HELLO,CHRYSTAL'

8、开头结束判断

8.1、开头:startswith
>>> sanxi.startswith('hello')
True
>>> sanxi.startswith('haha')
False
8.2、结束:endswith
>>> sanxi.endswith('chrystal')
True
>>> sanxi.endswith('love')
False

9、拼接字符串:join

​ join,把元素全为字符的列表拼接成字符串

>>> sanxi=['666','???','777']
>>> ','.join(sanxi)
'666,???,777'
#语法是开头指定分隔符,后面跟上join接着是列表

10、替换字符:replace

​ 替换指定的字符,不指定次数则默认替换所有符合要求的字符!

>>> sanxi='hello,chrystal'
>>> sanxi.replace('h','H')
'Hello,cHrystal'
>>> sanxi.replace('h','H',1)
'Hello,chrystal'

11、了解即可

11.1、查找字符:find
>>> sanxi='hello,chrystal'
>>> sanxi.find('o')
4
>>> sanxi.find('a')
12
11.2、查找字符:index

​ index也是查找,类似find,区别仅仅是当找不到字符时,find返回-1代表找不到,而index直接语法错误!

>>> sanxi.index('a')
12
>>> sanxi.index('x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> sanxi.find('x')
-1
11.3、统计字符:count

​ count是统计字符串中某个字符出现的次数,跟len统计字符串中字符的数量不一样!

>>> len(sanxi)
14
>>> sanxi.count('h')
2
11.4、居中对齐center
>>> 'loading'.center(30,'*')
'***********loading************'
#如上,语法:'字符串'.center(填充符号数量,填充符号)

center、ljust,rjust,zfill

11.5、左对齐:ljust

​ 左对齐,用法同上

>>> 'loading'.ljust(30,'*')
'loading***********************'
11.6、右对齐:rjust

​ 用法同上

>>> 'loading'.rjust(30,'*')
'***********************loading'
11.7、右对齐:zfill

​ 它也是右对齐,不同的是定死了只能用0填充!所以只需要填数量就好了!

>>> 'loading'.zfill(30)
'00000000000000000000000loading'

我觉得贼丑!

11.8、expandtabs

​ 指定制表符空格数,expandtabs() 方法把字符串中的 tab 符号 \t 转为空格,tab 符号 \t 默认的空格数是 8,在第 0、8、16...等处给出制表符位置,如果当前位置到开始位置或上一个制表符位置的字符数不足 8 的倍数则以空格代替。

以上制表符内容来自

>>> sanxi = 'hello\tchrystal\tyou\tare\tso\tpretty'
>>> print('原始字符串:{}'.format(sanxi))
原始字符串:hello       chrystal        you     are     so      pretty
>>> print('制表符为10时:{}'.format(sanxi.expandtabs(10)))
制表为10时:hello     chrystal  you       are       so        pretty
11.9、captalize,

将字符串的第一个字母变成大写,其他字母变小写。

>>> sanxi='haHa'
>>> sanxi.capitalize()
'Haha'
11.10、swapcase

​ 根据字符串大小写转换,小则转为大,大则转为小

>>> sanxi='hAHa'
>>> sanxi.swapcase()
'HahA'
11.11、title

​ 每个单词首字母大写

>>> sanxi='hello,chrystal'
>>> sanxi.title()
'Hello,Chrystal'

12、is判断家族

12.1、isdigit

​ 判断字符串是否由纯数字组成!只要有一个字符不是纯数字都是false哈!

​ 注意:isdigit无法识别中文数字与罗马数字,只能识别阿拉伯数字!

>>> '666'.isdigit()
True
>>> '66ha'.isdigit()
False
12.2、.isnumeric()

​ 也是判断是否字符串为纯数字组成,和digit区别是它可以识别阿拉伯数字、中文数字、罗马数字

>>> 'ⅥⅥⅥ'.isnumeric()
True
>>> '六六六'.isnumeric()
True

​ 看起来numeric厉害点,实际digit用得多!至于为什么?你见过哪个程序密码可以设置中文数字和罗马数字的。。。特别是罗马数字,打出来都费劲!当然也不是毫无用处,比如说中文数字,在发票、银行票据等特殊场景就可能用得上!

12.3、isalnum

​ 判断字符串是否全部由字母和数字组成

>>> '6h'.isalnum()
True
>>> '6h.'.isalnum()
False
12.4、alpha

​ 判断字符串是否全部由字母组成

>>> 'haha'.isalpha()
True
>>> '66ha'.isalpha()
False
12.5、isdecimal

​ 检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。

​ 注意:定义一个十进制字符串,只需要在字符串前添加 'u' 前缀即可,Python3.X默认数字就是u!

>>> '55'.isdecimal()
True
>>> '5h'.isdecimal()
False
12.6、isidentifier

​ 标识符是否为有效标识符,其中内置的全是有效的,比如if、for、while之类的;至于自定义的标准,如仅能是字母、数字、下划线组合,且不能以数字开头;具体可以参照变量名命名规范

>>> sanxi='hello,chrystal'
>>> sanxi.isidentifier()
False
>>> sanxi='soul_of_china'
>>> sanxi.isidentifier()
True
12.7、islower
所有字母是否为纯小写!注意哈:是检测字母,而不检测符号!
>>> sanxi='soul_of_china'
>>> sanxi.islower()
True
>>> sanxi='Hello,sanxi'
>>> sanxi.islower()
False
12.8、isupper

​ 和上面的相反,是检查是否为纯大写

>>> sanxi='Hello,sanxi'
>>> sanxi.isupper()
False
>>> sanxi='HELLO,SANXI'
>>> sanxi.isupper()
True
12.9、isprintable

​ 判断字符串所有字符是否可以打印输出,那么哪些不能打印?回车和换行符就不能打印,如下:

>>> sanxi='sanxi\n666'
>>> sanxi.isprintable()
False
12.10、isspace

​ 判断字符串是否为纯空白字符

>>> sanxi='sanxi\n666'
>>> sanxi.isspace()
False
#包含空格也不行,必须得是纯空白字符
>>> sanxi='san xi 666'
>>> sanxi.isspace()
False
>>> sanxi='  '
>>> sanxi.isspace()
True
12.11、istitle

​ 是否每个单词首字母为大写

>>> sanxi='Hello,chrystal'
>>> sanxi.istitle()
False
>>> sanxi='Hello,Chrystal'
>>> sanxi.istitle()
True
世间微尘里 独爱茶酒中