python学习之字符串

7 字符串

7.1 字符串概念

  • 在python中字符串是基本数据类型,是一个不可变的字符序列

7.2 字符串驻留机制

  • 概念:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
  • 驻留机制的几种情况(交互模式)
    1.字符串的长度为0或1时
    2.符合标识符的字符串
    3.字符串只在编译时进行驻留,而非运行时
    4.[-5,256]之间的整数数字
    5.sys中的intern方法强制2个字符串指向同一个对象
    PyCharm对字符串进行了优化处理

顺便:cmd输入python可以进入交互模式编译(nice啊
在这里插入图片描述
符合标识符的字符串是指含有字母数字下划线的字符串,不符合id不同
在这里插入图片描述
只在编译时驻留
在这里插入图片描述
强制2个字符串指向同一个对象
在这里插入图片描述
PyCharm对字符串进行了优化处理

a = 'abc'
b = "abc"
c = '''abc'''
print(a,id(a))
print(b,id(b))
print(c,id(c))
# 全部输出:abc 2642812555184

7.3 字符串的查询操作

  • index():查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError
  • rindex() :查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError
  • find():查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1
  • rfindO:查找子串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

print(s.find('k')) #-1
print(s.index('k')) #报错:ValueError: substring not found

7.4 字符串的大小写转换操作

  • upper():把字符串中所有字符都转成大写字母
  • lower():把字符串中所有字符都转成小写字母
  • swapcase():把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母
  • capitalize():把第一个字符转换为大写,把其余字符转换为小写
  • title():把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写

7.5 字符串的对齐操作

  • center():居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则则返回原字符串
  • ljust():左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则则返回原字符串
  • rjust():右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则则返回原字符串
  • zfill():右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身
s = 'hello,hello'
print(s.center(20,'*'))
print(s.ljust(20,'*'))
print(s.rjust(20,'*'))
print(s.zfill(20))
'''
****hello,hello*****
hello,hello*********
*********hello,hello
000000000hello,hello
'''

7.5 字符串的劈分操作

  • split():
    1.从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表;
    2.通过参数sep指定劈分字符串的劈分符
    3.通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独做为一部分

  • rsplit():
    1.从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表;
    2.通过参数sep指定劈分字符串是劈分符
    3.通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独做为一部分

s = 'hello,hello,world'
list = s.split()
print(list)# ['hello,hello,world']

# 从左侧开始劈分
s1 = 'hello|world|python'
print(s1.split())
print(s1.split(sep='|'))
print(s1.split(sep='|',maxsplit=1))

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

# 从右侧开始劈分
print(s1.rsplit())
print(s1.rsplit('|'))
print(s1.rsplit(sep='|',maxsplit=1))

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

7.6 字符串的判断操作

  • isidentifier():判断指定的字符串是不是合法的标识符
  • isspace():判断指定的字符串是否全部由空白字符组成(回车、换行,水平制表符)
  • isalpha():判断指定的字符串是否全部由字母组成
  • isdecimal():判断指定字符串是否全部由十进制的数字组成
  • isnumeric():判断指定的字符串是否全部由数字组成
  • isalnum():判断指定字符串是否全部由字母和数字组成
s = 'hello,hello,world'
print(s.isidentifier()) #False
print(s.isspace()) #False
print(s.isalpha()) #False
print(s.isdecimal()) #False
print((123).isnumeric()) #True 数字要括起来
print(s.isalnum()) #False
print('abc'.isidentifier()) #True

7.6 字符串的替换和合并操作

  • replace():第1个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以通过第3个参数指定最大替换次数
  • join():将列表或元组中的字符串合并成一个字符串
# ?????分隔符怎么不是在中间 待解
s = 'hello,hello,world,join,hello'
print(s.replace('world','my')) #hello,hello,my,join,hello
print(s.replace('hello','hi',2)) # hi,hi,world,join,hello

list  = [ 'hello','hello','world','join','hello']
print('|',join(list)) #| hello hello world join hello
print('',join(list)) # hello hello world join hello 前面有个空格

t = ('hello','hello','world','join','hello')
print('',join(t)) # hello hello world join hello

print('*',join('python')) #* p y t h o n

7.7 字符串的比较

print('apple'>'app') #True
print('apple'>'banana') #False
print(ord('a'),ord('b')) #False
print(chr(97),chr(98)) #a b

7.8 字符串的切片操作

字符串是不可变类型,不具备增删改等操作,切片操作后将产生新的对象在这里插入图片描述

s ='hello,python'
s1 = s[:5]
s2 = s[6:]
s3 = '!'
s4 = s1+s2+s3
print(s1)
print(s2)
print(s4)
print(id(s))
print(id(s1))
print(id(s2))
print(id(s4))
'''
hello
python
2537319571632
2537319581488
2537319581040
'''
#切片操作 [start:end:step]
s ='hello,python'
print(s[1:5:1]) #从1开始截到5,步长为1
print(s[::2]) #默认从0开始,到最后一个元素结束,步长为2
print(s[::-1]) #默认从最后一个元素开始,到第一个元素结束,因为步长为负
print(s[-6::1]) # 从索引为-6开始,到字符串的最后一个结束,步长为1
'''
ello
hlopto
nohtyp,olleh
python
'''

7.9 字符串的格式化

  • %作占位符:%s 字符串;%i或%d 整数;%f 浮点数
  • {}作占位符:'我的名字叫:{0},今年{1}岁了,我真的叫{0}'.format(name,age) 其中,{}里面的0和1分别表示format中下标为0和为1的变量
  • f-string
name = '张三'
age = 19
#%占位符  ' '%()
print('我叫%s,今年%d岁'%(name,age)) #我叫张三,今年19岁
#{} ' '.format()
print('我叫{0},今年{1}岁'.format(name,age)) #我叫张三,今年19岁
#f-string f' {} '
print(f'我叫{name},今年{age}岁') #我叫张三,今年19岁
  • 精度和宽度
print('%10d'%99) #10表示宽度
print('%.3f'%3.14159) #.3表示精度,小数点后面保留几位小数
print('%10.3f'%3.14159) #同时表示精度和宽度
print('{0:.3}'.format(3.14159)) #表示format中的第一个变量保存3位数
print('{0:.3f}'.format(3.14159)) #表示format中的第一个变量保存3位小数
print('{:10.3f}'.format(3.14159)) #默认format中的第一个变量,保存3位小数,宽度为10
'''
        99
3.142
     3.142
3.14
3.142
     3.142
'''

7.10 字符串的编码和解码

  • 编码:将字符串转换成二进制数据bytes
  • 解码:将bytes类型的数据转换成字符串类型
s = '天涯共此时'
#编码 GBK中一个中文两个字节,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、付费专栏及课程。

余额充值