首页 > 其他 > 详细

字符串

时间:2021-02-16 18:23:27      阅读:23      评论:0      收藏:0      [点我收藏+]

一、字符串的驻留机制

字符串是不可变的字符序列,不同的值被存放在字符串的驻留池中,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))

 

字符串

原文:https://www.cnblogs.com/beatuy/p/14406121.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!