一句废话都没有的Pycharm(九):字符串

一句废话都没有的Pycharm(九):字符串

介绍:

  • 1.字符串的驻留机制

  • 2.字符串的常用操作

    • 2.1查询
    • 2.2字符串大小写转换
    • 2.3字符串内容对齐
    • 2.4字符串的劈分
    • 2.5判断字符串
    • 2.6替换与合并
  • 3.字符串的比较

  • 4.字符串的切片操作

  • 5.格式化字符串

  • 6.字符串的编码转换

1.字符串的驻留机制

字符串的驻留机制就是仅保留一份相同且不可变的保存方式。具体来说,我用三种方式输出同一个字符串,它们的地址都是相同的。

例如:

#字符串的驻留机制
a='kcopop'
b="kcopop"
c='''kcopop'''
print(a,id(a))#id:4463805616
print(b,id(b))#id:4463805616
print(c,id(c))#id:4463805616,
#由此,我们发现,相同字符串的不同输出有相同的id,这就叫字符串的驻留机制

结果:在这里插入图片描述
驻留机制会出现的几种情况:

  • 字符串的长度为0或者1
  • 符合标识符的字符串(含有字母、数字、下划线的字符串)
  • 字符串只在编译时进行驻留,非运行时
  • [-5,256]之间的整数数字

对于pycharm来说,它优化这个机制,只要内容相同,就自动驻留。

2.字符串的常用操作

2.1查询
骨骼图:
在这里插入图片描述
代码展示:

#查找
s="hello,hello"
print(s.index('lo'))#查找子串lo第一次出现的位置
print(s.rindex('lo'))#查找子串lo第一次出现的位置
print(s.find('lo'))#查找子串lo最后一次出现的位置
print(s.rfind('lo'))#查找子串lo最后一次出现的位置
#print(s.index('hd'))#ValueError: substring not found 如果查找的子串不存在,则输出ValueError
#print(s.rindex('hd'))#ValueError: substring not found 如果查找的子串不存在,则输出ValueError
print(s.find('hd'))#如果查找的子串不存在,则返回-1
print(s.rfind('hd'))#如果查找的子串不存在,则返回-1

结果展示:
在这里插入图片描述
2.2字符串大小写转换

字符串是个不可变序列,改变大小写将会产生一个新的字符串对象。

骨骼图
在这里插入图片描述
代码片段:

p="hello,Lihuanying"
print(p.upper())#所有字母转换成大写
print(p.lower())#所有字母转换成小写
print(p.swapcase())#字符串中大写换小写,小写换大写
print(p.capitalize())#第一个字符转成大写,其余转成小写
print(p.title())#每个单词第一个字符转为大写,每个单词剩余转为小写

结果展示:
在这里插入图片描述
2.3字符串内容对齐

骨骼图:
在这里插入图片描述
代码演示:

#字符串内容对齐
print(p.center(20,'*'))#居中
print(p.ljust(20,'*'))#左对齐
print(p.rjust(20,'*'))#右对齐
print(p.zfill(20))#右对齐,右边用0填充
print('-1.222'.zfill(10))#右对齐,右边用0填充,0填充在负号后面了

结果展示:
在这里插入图片描述
2.4字符串的劈分

骨骼图:
在这里插入图片描述
代码演示:

#劈分
#split()默认从左开始分
q='hello; Li; huan; ying"'
print(q.split())#默认的劈分字符是空格操作,返回的值是一个列表
print(q.split(sep=';'))#指定;为劈分符
print(q.split(sep=';',maxsplit=2))#指定;为劈分符,最大劈分次数为2,则剩余的huan; ying会作为一个整体
#rsplit()默认从右开始分
print(q.rsplit())#默认的劈分字符是空格操作,返回的值是一个列表
print(q.rsplit(sep=';'))#指定;为劈分符
print(q.rsplit(sep=';',maxsplit=2))#指定;为劈分符,最大劈分次数为2,则剩余的huan; ying会作为一个整体

结果展示:
在这里插入图片描述
2.5判断字符串

骨骼图:
在这里插入图片描述
代码展示:

#判断字符串
#判断指定字符串是不是合法的标识符
print('1.','Tom汤姆_1'.isidentifier())#T:数字字母下划线都是合法的
print('2.','Tom汤姆&_1'.isidentifier())#F
#判断指定字符串是否全部由空白字符组成(回车,换行,水平制表符)
print('3.','\t\n\r'.isspace())#T回车,换行,水平制表符
print('4.','\b'.isspace())#F退格不是空白字符
#判断指定字符串是不是全部由字母组成
print('5.','Tom汤姆'.isalpha())#T
print('6.','1'.isalpha())#F
#判断指定字符串是不是全部由十进制的数字组成
print('7.','123'.isdecimal())#T
print('8.','一'.isdecimal())#F
#判断指定字符串是不是全部由数字组成
print('9.','一1'.isnumeric())#T
#判断指定字符串是不是全部由字母和数字组成
print('10.','一1tom汤姆'.isalnum())#T
print('11.','_'.isalnum())#F

结果展示:
在这里插入图片描述
2.6替换与合并

骨骼图:在这里插入图片描述
代码演示:

#替换
y='hi,Tom,Jerry,Peter,Alice'
print(y.replace('Tom','Bob'))
y='hi,Tom,Tom,Tom,er,Alice'
print(y.replace('Tom','Bob',2))#第一个参数指定被替换的子串,第二个参数指定替换子串的字符串,第三个参数指定最大替换次数
#合并
#合并字符串
lis=['hi','Tom','Join']
print(''.join(lis))
print(','.join(lis))#用逗号隔开
#合并元组
tuple1=('hi','Tom','Join')
print(','.join(tuple1))#用逗号隔开

结果展示:
在这里插入图片描述
3.字符串的比较

比较运算符>,>=,<,<=,==,!=

当两个字符进行比较时,其实比较的是他们的ordinal value,可以用函数ord()得到字符的ordinal valu,相反,可以用函数chr获得ordinal valu所对应的字符。
例如:通过ord(a)可以得到a的ordinal value为97。

代码演示:

#比较
print('a'>'b')#F
print('a'<'b')#T
print(ord('a'))
print(ord('b'))
print(chr(97))
print(chr(98))
print('abb'=='abb')#T
print('abb'!='abb')#F

结果:在这里插入图片描述
4.字符串的切片操作

我们都知道字符串是一个不可变类型,不能进行增删改操作,但通过引入切片操作,我们可以对字符串引入新元素。

代码演示:

#切片新增元素
q='hello,Lihuanying"'
q1=q[:5]
print(q1)
q2=q[6:]
print(q2)
q3='!'
q4=q1+q3+q2
print(q4)

结果:
在这里插入图片描述
5.格式化字符串
创建方式

  • %占位符
  • %s——字符串
  • %I或%d——整数
  • %f——浮点数

语法:'我是%s,今年%d岁' % (name,age)

  • {}

语法:'我是{0},今年{1}岁,没骗你,真的{1}岁' .format (name,age)

代码演示:

#格式化
#%
name='Tom'
age=22
print('我叫%s,今年%d岁了' % (name,age))
#{}
print('我叫{0},今年{1}岁了,不骗你,真的{1}岁'.format(name,age))

结果:
在这里插入图片描述
6.字符串的编码转换

  • 编码

将字符串转化为二进制数据(bytes)

  • 解码

将bytes类型的数据转换为字符串类型

代码演示:

#编码
a='你是谁'
print(a.encode(encoding='GBK'))#在GBK编码格式中一个中文占两个字符
print(a.encode(encoding='UTF-8'))#在GBK编码格式中一个中文占三个字符
#解码
w1=a.encode(encoding='GBK')
print(w1.decode(encoding='GBK'))
w2=a.encode(encoding='UTF-8')
print(w2.decode(encoding='UTF-8'))

结果展示:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值