第八章 python中的字符串

目录

一、字符串的驻留机制

二、字符串的常见操作

1、查询方法

 2、大小写转换

3、字符串内容对齐

三、判断字符串操作的方法

1、isidentifier()

2、 isspace()

3、isalpha()

4、isdecimal()

5、isnumeric()

6、isalnum()

四、字符串的劈分操作

1、split()函数

2、rsplit()函数

五、字符串的替换和合并操作

1、字符串的替换

replace()

 2、字符串的合并

join()

 六、字符串的比较

运算符:>,<,==,!=,<=,>=

七、字符串的切片操作

八、 格式化字符串

1、使用%进行格式化

2、使用{}进行格式化

3、使用f-string进行格式化

九、字符串的编码转换

十、字符串知识点总结


字符串是python的基本数据结构,是一个不可变的序列。

一、字符串的驻留机制

python中字符串的表示有三种:单引号,双引号,三引号表示

a = 'python'
b = "python"
c = '''python'''

分别查看一下他们的id

print(id(a))
print(id(b))
print(id(c))

1700223303472
1700223303472
1700223303472

查看id值后发现三个不同的变量a,b,c他们的id值居然是一模一样的,因此并没有创建新的字符串,这就是字符串的驻留机制 :仅保存一份相同且不可变的字符串方式,由于a中已经存储了字符串python,再放入b中时不会创建新的地址而是直接复制a中的地址。

字符串驻留机制的优缺点

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

在需要进行字符串的拼接时,会产生新的字符串对象,建议使用str类型的.join方法,而非+号连接,因为join()方法是先计算出字符串的长度,然后再拷贝,只new一次对象,效率比+号高。

二、字符串的常见操作

1、查询方法

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

s = 'hello.world'
print(s.index('lo'))

 3

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

print(s.rindex('l'))

9

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

print(s.find('lo'))

3

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

print(s.rfind('8'))

-1

 2、大小写转换

upper() 把字符串中所有的字符转成大写字母

a = 'heLLo.python'
b = s.upper()
print(a,id(a))
print(b,id(b))

 heLLo.python 1641147873712
HELLO.WORLD 1641147873264

 查看id值发现修改过后出现了新的字符串

lower() 把字符串中所有的字符转换成小写字母

print(a.lower())

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

print(a.swapcase())

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

print(a.capitalize())

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

print(a.title())

3、字符串内容对齐

center() 字符串居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符

s = 'hello,python'
print(s.center(20,'*'))

 ****hello,python****

print(s.center(10,'*'))   #小于实际宽度输出原字符

 hello,python 

ljust() 字符串左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符

print(s.ljust(20))

 hello,python       |

 注意左对齐设置的宽度大于实际宽度会自动填充空格一直到竖线。

rjust() 字符串右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符

print(s.rjust(20,'('))

 ((((((((hello,python

zfill() 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果设置宽度小于实际宽度则返回原字符

print(s.zfill(20))

00000000hello,python

三、判断字符串操作的方法

1、isidentifier()

英 [aɪˈdentɪfaɪə(r)],标识符,标识号

判断指定的字符串是不是合法的标识符,返回值为True、False。

s = 'hello,python'
print(s.isidentifier())

False

2、 isspace()

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

print('\t'.isspace())

True

3、isalpha()

英 [ˈælfə] ,字母表

判断指定的字符串是否全部由字母组成。注:在python中汉字也可作为字母

print('zhang张三'.isalpha())  #汉字也是字母

True

4、isdecimal()

判断指定字符串是否全部由十进制数字组成。

print('3453'.isdecimal())

True

5、isnumeric()

判断指定字符串是否全部由数字组成。

print('789dad'.isnumeric())

False

6、isalnum()

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

print('dajhd44w'.isalnum())

True

四、字符串的劈分操作

1、split()函数

从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表,以通过的参数sep指定分割字符串的劈分符,通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余字符串会单独作为一部分。

s = 'helloworld python'
lst = s.split()
#没有指定分隔符时默认以字符串中的空格为分隔符
s1 = 'hello|world|python'
print(s1.split(sep='|'))
['helloworld', 'python']

['hello', 'world', 'python']

2、rsplit()函数

从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表,以通过的参数sep指定分割字符串的劈分符,通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余字符串会单独作为一部分。

print(s1.rsplit(sep='|',maxsplit=1))

['hello|world', 'python']

五、字符串的替换和合并操作

1、字符串的替换

replace()

第一个参数指定被替换的字符,第二个参数指定替换字串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以使用第三个参数指定最大替换次数,被指定字符不存在时不会报错,输出原字符串。

s = 'hello,python'
print(s.replace('python','java'))
print(s.replace('pt','ja')) #pt不存在,输出原字符

hello,java
hello,python

 2、字符串的合并

join()

将列表或元组中的字符串合并成一个字符串

t = ('hello','java','python')
print(''.join(t))
print('*'.join(t))  #字符串连接

hellojavapython
hello*java*python

 六、字符串的比较

运算符:>,<,==,!=,<=,>=

比较规则:首先比较两个字符中的第一个字符,如果相等则依次比较后面的字符,直到两个字符不相等时,其比较结果就为两个字符串的比较结果,后续字符不在比较。

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

print('apple'>'app')
print('apple'>'appre')
print(ord('a'),ord('b')) #97,98
print(chr(97),chr(98))
print(ord('张'))

True
False
97 98
a b
24352

七、字符串的切片操作

字符串是不可变序列,不具备增删改等操作,切片操作将会产生新的对象。

s = 'hello,python'
s1 = s[:5]
s2 = s[6:]
s3 = '!'
new = s1+s3+s2
print(new)

hello!python

利用字符串的切片操作可以实现字符串的逆序输出:

a = 'asdf'
print(a[::-1])

 fdsa

八、 格式化字符串

1、使用%进行格式化

name = '张三'
age = 25
print('我叫%s,我今年%d岁' % (name,age))

还可以表示保留小数位数


#10表示宽度
print('%10d' % 99)
#保留五位小数
print('%.5f' % 3.141592)
#同时指定宽度和小数
print('%10.5f' % 3345.324242)

        99
3.14159
3345.32424 

2、使用{}进行格式化---使用format()方法

使用{}需要使用.format()方法。

print('我叫{0},我今年{1}岁,我真的叫{0}'.format(name,age))

使用format()表示保留小数

#使用{}也可以实现宽度精度的设置
print('{0}'.format(3.1415926))
#总共保留3位数字
print('{0:.3}'.format(3.1415926))
#总共保留三位小数
print('{0:.3f}'.format(3.1415926))
#0表示的占位符顺序,可以省略不写
#同时设置宽度和精度
print('{0:10.3f}'.format(3.1415926))

3、使用f-string进行格式化

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

九、字符串的编码转换

s='天涯共此时'
#字符串编码
print(s.encode(encoding='GBK'))  #在GBK编码中一个中文占两个字节
print(s.encode(encoding='UTF-8')) #一个中文占三个字节

#解码,编码格式与解码要相同
byte=s.encode(encoding='GBK')
#字符串解码
print(byte.decode(encoding='GBK'))

十、字符串知识点总结

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值