字符串

一、字符串的驻留机制

字符串是不可变的字符序列,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间。而是把字符串的地址付给新创建的变量。(仅保存一份相同的且不会改变的

a= 'hello'
b = "hello"
c = '''hello'''
print(a,id(a))
print(b,id(b))
print(c,id(c))
结果:

hello 2517227894184
hello 2517227894184
hello 2517227894184

驻留机制的几种的情况:

(1)字符串长度为0或1

(2)符合标识符的字符串

(3)字符串只在编译时驻留,而非运行时

a= 'abc'
b = "ab"+'c'
c = ''.join(['ab','c'])
print(a,id(a))
print(b,id(b))
print(c,id(c))
结果:

abc 2489126615224
abc 2489126615224
abc 2489127420904

虽然a,b,c的输出结果都是abc,但是a,b有相同的内存空间,与c不同。是因为a,b的内存空间是在编译时分配,由于a与b内容相同,所以指向同一块内存空间。而c是在程序运行过程中利用join()方法重新开辟的新的内存空间,所以不同。

(4)【-5,256】之间的整数数字

驻留机制的优缺点

  当需要值相同的字符串时,可以直接从字符串池中拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串时比较影响性能的。

  进行字符串拼接是建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符串中的长度,然后在拷贝,只new一次对象,效率要比+高。

二、字符串的查询操作的方法

  index()  查找子串substr第一次出现的位置,如果查找的子串不存在,抛出异常

  rindex() 查找子串substr最后一次出现的位置,如果查找的子串不存在,抛出异常

  find() 查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1

  rfind()查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1 

s = 'hello,hello'
print(s.index('lo'))
print(s.find('lo'))
print(s.rindex('lo'))
print(s.rfind('lo'))
结果:

3
3
9
9

  建议大家使用find()

三、字符串的大小写转化操作的方法

  upper() 所有字符转成大写字母l

  lower() 所有字符都转成小写字母

  swapcase() 字符串中所有大写转成小写字母,所有小写字母转成大写字母

  capitalize() 第一个字符转换为大写,其余字符转换为小写

  title() 每一个字符的第一个字符转换为大写,把每个单词的剩余字符转换为小写

四、字符串的劈分操作的方法

  split()

  rsplit()

s = 'hello,python you'
lst = s.split()
print(lst)
print(s.split(sep=','))
结果:

['hello,python', 'you']
['hello', 'python you']

五、字符串的一系列操作

isidentifier()   判断字符串是否合法,符合标识符命名规则

ispace()       判断指定的字符串是否全部是由空白字符组成(回车、换行、水平制表符)

isalpha()   判断指定的字符串全部由字母组成

isdecimal()  判断指定字符串是否全部由十进制的数字组成

isnumeric()  判断指定的字符串是否全部由数字组成

isalnum()  判断指定字符串是否全部由字母和数字组成

 

replace()  字符串替换

join()      字符串的合并,将列表或元组中的字符串合并为一个字符串

s ='hello,python,you'
print(s.replace('hello','Hello'))
s1 = ['hello,python','you']
print('*'.join(s1))
结果:

Hello,python,you
hello,python*you

 

六、字符串的比较操作

比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,一次比较下去,直到出现字符不相等时,其比较结果就是字符串的比较结果,两个字符串中的所有后续字符将不再被比较

比较原理:两个字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ordUI应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符

print('apple'>'app')
print(ord('a'),chr(97))
结果:

True
97 a

七、字符串的切片操作

字符串是不可变类型

不具备增删改等操作,切片操作将产生新的对象

格式化字符串:按一定格式输出的字符串

  %:占位符             

  {}:占位符

name = '张三'  #%作占位符
age = 20
print('我叫%s,今年%d岁' %  (name,age))#元组

#{}做占位符
print('我叫{0},今年{1}岁'.format(name,age))#format方法

#f-string
print(f'我叫{name},今年{age}岁')

#表示的精度和宽度
print('%10d'  % 99) #10表示的是宽度
print('%.3f' % 3.1415926)# .3表示小数点后保留三位
print('%10.3f' % 3.1415926)#表示总宽度为10,且小数点后保留三位

print('{0:.3}'.format(3.1415926))#.3表示一共是三位小数
print('{:.3f}'.format(3.1415926))#.3f表示是三位小数
print('{0:10.3f}'.format(3.1415926))#同时设置宽度和精度,宽度是10,精度是3位小数

八、字符串的编码转换

  二进制数据

  编码  解码 

s = '天涯共此时'
print(s.encode(encoding='GBK'))#在GBK中一个中文占两个字节
byte = s.encode(encoding="GBK")
print(byte.decode(encoding='GBK'))

 

posted @ 2021-02-16 09:55  城东有个混子  阅读(79)  评论(0)    收藏  举报