字符串
Python的字符串是不可变得(不支持单字符类型,单字符也是字符串使用)
字符串编码
ord(‘’);字符转换成对应的编码
chr();编码对应字符
>>> ord('A')
65
>>> chr(65)
'A'
>>>
通过单引号和双引号类创建字符串,有单引号用双引号,反之用单
也可以用连续三个来创建多行
可以允许空字符串存在
len();用来查看字符串长度
>>> c = ''
>>> len(c)
0
转义字符
+特殊字符
字符串拼接
可以用+ 也可以用空格直接
>>> 'aa'+'aa'
'aaaa'
>>> 'a' 'aa'
'aaa
字符串的复制
#复制直接用乘号(*)
>>> a = 'asd'*3
>>> a
'asdasdasd'
>>>
不换行打印
可以赢end = ”任意字符串“来添加任何内容
print('aa',end = "*")
print('bb',end = "*")
print('cc')
aa*bb*cc
控制台上读取字符串
input(" ")
>>> myname = input("请输入名字:")
请输入名字:小站
>>> myname
'小站'
使用[]提取字符
我们可以通过在字符串后面添加[],在[]里面指定偏移量
正向搜索:最左是[0]直到[ len(str)-1 ]
反向搜索:左右是-1,直到长度位置-len(str)为止
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a[1]
'b'
>>> a[-3]
'x'
>>> a[len(a)-1]
'z'
>>> a[-len(a)]
'a'
replace()字符串的替换
同过这个方法替换的是返回一个新的字符串,旧的没变
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a.replace("c","高")
'ab高defghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a = a.replace("c","高")
>>> a
'ab高defghijklmnopqrstuvwxyz'
字符串切片slice操作
[起始偏移量start:终止偏移量end:步长step]
默认步长为1,既一个一个挨着取
若步长为2,则隔一个个取一个,两个取一个
包头不包尾,不在范围也不报错从
>>> a = "abcderghigklmnopqrstuvwxyz"
>>> a[2]
'c'
>>> a[1:5]
'bcde'
>>> a[1:5:2]
'bd'
>>> a[:]
'abcderghigklmnopqrstuvwxyz'
>>> a[:5]
'abcde'
>>> a[5:]
'rghigklmnopqrstuvwxyz'
>>> a[-3:]
'xyz'
>>> a[-8:-3]#这里-1代表最右边的数,同时,-8是头,-3是尾
'stuvw'
>>> a[::-1]#相当于倒叙输出
'zyxwvutsrqponmlkgihgredcba'
>>> a[2:200]#不在范围不报错
'cderghigklmnopqrstuvwxyz'
split()分割和join()合并
split()可以基于指定分割符将字符串分割成多个字符串(储存列表中)。如果不指定分割符,则默认使用空白字符(换行符/空格/制表符)。
a = "to be or not to be"
>>> a
'to be or not to be'
>>> a.split() #这里默认空格
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split("to")
['', ' be or not ', ' be']
join()的作用和split()相反
>>> "*".join(a)
't*o* *b*e* *o*r* *n*o*t* *t*o* *b*e'
拼接字符串的要点
使用字符串拼接符+,会生成新的字符对象,因此不推荐使用+来拼接。推荐join函数,因为join函数在拼接字符串之前会计算所有的字符串长度,在逐一拷贝,仅建一次对象
【测试拼接符+和join方法的效率】
import time
time01 = time.time() # 起始时刻
a = ""
for i in range(1000000):
a += "atr"
time02 = time.time() #终止时刻
print("运算时间:"+str(time02-time01))
time03 = time.time()
li = []
for i in range(1000000):
li.append("str")
a = "".join(li)
time04 = time.time()
print("运算时间:"+str(time04 - time03))
##########结果##############
运算时间:0.7101120948791504
运算时间:0.14000201225280762
字符串驻留机制
字符串驻留:仅保存一份相同且不可变得字符串方法。不同的值存放在字符串驻留池中(对符合表示符规则的字符串(下划线,字母,数字))
>>> a = "aa_2"
>>> b = "aa_2"
>>> a is b
True
>>> c = "dd#" #这个字符串不符合标识符规则
>>> d = "dd#"
>>> c is d
False
in/not in关键字,判断某个字符是否存在于字符串中
>>> a = "aa_2"
>>>> "a" in a
True
常用的方法
去除首位信息
strip()去除首位的指定信息
>>> a = " asdf "
>>> b = "*asd*"
>>> a.strip() #这里指空格
'asdf'
>>> b.strip("*") #前后的“*”
'asd'
>>> b.rstrip("*") #右边的加r
'*asd'
>>> b.lstrip("*") #左边的加l
'asd*'
大小写转换
格式排版
center()(居中),ljust()(左对齐),rjust()(右对齐)这三个函数对于字符串排版
center(几个字符,使用啥填充)
>>> a = "asd"
>>> a.center(11) #要是不填,默认空格
' asd '
>>> a.center(11,"*") #居中
'****asd****'
>>> a.ljust(10,"*") #左对齐
'asd*******'
其他方法
isalnum() 是否为字母或数字
isalpha() 检测字符串是否只由字母组成(含汉字)
isdigit() 检测字符串是否只由数字组成
isspace() 检测是否为空白符
isupper() 是否为大写字母
islower() 是否为小写字母
字符串的格式化
str.format()
基本语法,通过{ }和:代替以前的%
#可以填1 ,0 但必须得对上号,第一个是0,第二个是1,以此类推
>>> a = "名字是:{0},年龄是:{1}"
>>> b=a.format("洗发",15)
>>> b
'名字是:洗发,年龄是:15'
>>> a = "名字是:{1},年龄是:{0}"
>>> b=a.format("洗发",15)
>>> b
'名字是:15,年龄是:洗发'
>>> a = "名字是:{2},年龄是:{1}"
>>> b=a.format("洗发",15,15) #必须补上
>>> b
'名字是:15,年龄是:15'
>>> a = "名字是:{name},年龄是:{age}"
>>> b = a.format(name='小明',age = 18)
>>> b
'名字是:小明,年龄是:18'
填充与对齐
^,<,>分别是居中,左对齐,右对齐,后面带宽度
:后面带填充字符,只能是一个字符。不指定的话,默认空格填充
>>> "{:^^9}".format("123")
'^^^123^^^'
>>> "我是{0},我喜欢数字{1:$^9}".format("小明","1")
'我是小明,我喜欢数字$$$$1$$$$'
数字格式化
可变字符串
在python中,字符串属于不可变对象,不支持原地修改,只能创建新的对象。如果我们需要经常修改,可以使用io.StringI对象或者array模块
>>> import io #导入io模块
>>> s = "hello,yj"
>>> sio = io.StringIO(s)
>>> sio
<_io.StringIO object at 0x000001D9BDBECEE8>
>>> sio.getvalue()
'hello,yj'
>>> sio.seek(3) #代表指针移到第四个
3
>>> sio.write("a") #进行修改
1
>>> sio.getvalue()
'helao,yj'