Python——字符串

一.字符串的驻留机制

1.字符串

是Python中的基本数据类型,是一个不可变的字符序列

2.驻留机制

相同字符串只保留一份拷贝,即id相同
①几种情况(交互模式 cmd
字符串的长度为0/1

s1=''
s2=''
s1 is s2 #True

符合标识符的字符串

s1='abc%'
s2='abc%'
s1==s2#False
s1 is s2#False

字符串只在编译时进行驻留,而非运行时

a='abc'
b='ab'+'c'
c=''.join(['ab,'c'])
a is b#True   b在编译时完成
a is c#False   c是在运行时开辟空间 所以不驻留

[-5,256]之间的整数数字

②强制驻留

import sys
s1='abc%'
s2='abc%'
a=sys.intern(b)
s1 is s2#True

③优缺点
避免频繁的创建和销毁,提升效率和节约内存
拼接字符串和修改字符串是比较影响性能的,故拼接字符串使用str类型的join方法,而非+,因为join()是先计算所有字符中的长度,然后再拷贝,只new一次对象,效率比+高

二.字符串的操作

1.查询

①index()查找子串substr第一次出现的位置,若子串不存在,抛出ValueError
②rindex()查找子串substr最后一次出现的位置,若子串不存在,抛出ValueError
③find()查找子串substr第一次出现的位置,若子串不存在,返回-1
④rfind()查找子串substr最后一次出现的位置,若子串不存在,返回-1

s='hello,hello'
print(s.index('lo'))#3
print(s.find('lo'))#3
print(s.rindex('lo'))#9
print(s.rfind('lo'))#9

2.大小写转换

①upper()将所有字符转成大写
②lower()将所有字符转成小写
③swapcase()将大写转成小写,将小写转成大写
④capitalize()首字母大写,其余小写
⑤title()把每个单词首字母大写,其余小写

s='hello,hello'
print(s,id(s))
a=s.upper()#产生一个新的字符串对象
print(a,id(a))
b=s.lower()#产生一个新的字符串对象
print(b,id(b))

3.对齐操作

①center()
居中对齐;第1个参数指定宽度;第2个参数(可选)指定填充符,默认为空格;若设置宽度小于实际宽度返回原字符串
②ljust()
左对齐;第1个参数指定宽度;第2个参数(可选)指定填充符,默认为空格;若设置宽度小于实际宽度返回原字符串
③rjust()
右对齐;第1个参数指定宽度;第2个参数(可选)指定填充符,默认为空格;若设置宽度小于实际宽度返回原字符串
④zfill()
右对齐,左边用0填充;只接受一个参数指定宽度;若设置宽度小于实际宽度返回原字符串

s='hello,Python'
print(s.center(20,'*'))#****hello,Python****
print(s.ljust(20,'*'))#hello,Python********
print(s.rjust(20))#        hello,Python
print(s.zfill(20))#00000000hello,Python
print('-8910'.zfill(8))#-0008910

4.劈分操作

①split()
从字符串左边开始劈分,默认的劈分字符为空格字符串,返回的值都是一个列表
通过参数sep指定劈分字符串是的劈分符
参数maxplit指定最大劈分次数,在经过最大次劈分之后,剩余子串单独作为一部分
②rsplit()
从字符串右边开始劈分,默认的劈分字符为空格字符串,返回的值都是一个列表
通过参数sep指定劈分字符串是的劈分符
参数maxplit指定最大劈分次数,在经过最大次劈分之后,剩余子串单独作为一部分

s='hello world Python'
lst=s.split()
print(lst)#['hello', 'world', 'Python']
s1='hello|world|Python'
print(s1.split(sep='|',maxsplit=1))#['hello', 'world|Python']

print(s1.rsplit(sep='|',maxsplit=1))#['hello|world', 'Python']

5.判断字符串操作

①isidentifier()判断指定的字符串是否为合法标识符
②isspace()判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符)
③isalpha()判断指定的字符串是否全部由字母组成
④isdecimal()判断指定的字符串是否全部由十进制数字组成
⑤isnumeric()判断指定的字符串是否全部由数字组成
⑥isalnum()判断指定的字符串是否全部由字母和数字组成

6.字符串的替换、合并

①replace()
第1个参数指定被替换的子串,第2个参数指定替换子串的字符串;该方法返回替换后得到的字符串,替换前的字符串不发生改变;调用该方法时可以通过第3个参数指定最大替换次数
②join()
将列表或元组中的字符串合并成一个字符串

s='hello,Python,Python,Python'
print(s.replace('Python',"Java",2))#hello,Java,Java,Python

lst=['hello','java','Python']
print('|'.join(lst))#hello|java|Python
print(''.join(lst))#hellojavaPython

t=('hello','java','Python')
print(''.join(t))#hellojavaPython
print('*'.join('Python'))#P*y*t*h*o*n

7.字符串的比较

  >、>=、<、<=、==、!=

区别:==(内容)与is(地址)

#字符串的比较  ord()与chr()互为逆过程
print(ord('a'),ord('b'))#97 98
print(chr(97),chr(98))#a b

8.字符串的切片

切片操作产生新对象

s='hello,Python'
s1=s[:5]#产生新对象
s2=s[6:]#产生新对象
s3='!'#产生新对象
newstr=s1+s3+s2#产生新对象
print(newstr)#hello!Python
print(newstr[::-1])#nohtyP!olleh

三.格式化字符串

1.%作占位符

%s——字符串
%i或%d——整数
%f——浮点数

2.{}作占位符

3.f

#%
name='张丹'
age=20
print('我叫%s,今年%d岁' % (name,age))#我叫张丹,今年20岁
#{}
print('我叫{0},今年{1}岁了,我真的叫{0}'.format(name,age))#我叫张丹,今年20岁了,我真的叫张丹
#f字符串
print(f'我叫{name},今年{age}岁了')#我叫张丹,今年20岁了

#宽度
print('%10d' % 99)#        99
#浮点数精度:小数点后几位
print('%.3f' % 3.1415926)#3.142
print('{0:.3}'.format(3.1415926))#3.14    这里指一共三位数
print('{:.3f}'.format(3.1415926))#3.142
print('{:10.3f}'.format(3.1415926))#     3.142

四.字符串的编码转换

1.为什么要字符串编码转换?

A计算机str在内存中以Unicode表示,编码为byte字节传输,解码到B计算机显示

2.编码、解码

编码:将字符串转换为二进制数据(bytes)
解码:将bytes类型转换成字符串

#编码与解码
s='天涯共此时'
#编码
print(s.encode(encoding='GBK'))#在GBK编码格式中,一个中文占两个字节   b'\xcc\xec\xd1\xc4\xb9\xb2\xb4\xcb\xca\xb1'
print(s.encode(encoding='UTF-8'))#在UTF-8编码格式中,一个中文占三个字节  b'\xe5\xa4\xa9\xe6\xb6\xaf\xe5\x85\xb1\xe6\xad\xa4\xe6\x97\xb6'
#解码
#byte代表一个二进制数据
byte=s.encode(encoding='GBK')#编码
print(byte.decode(encoding='GBK'))#解码 天涯共此时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

说说其实

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值