这次主题是字符串类型的知识拓展。
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