字符串
一、什么是字符串?
-
定义:单引号/双引号/三引号,引起来的都是字符串
-
特性:
- 有序(支持索引)
- 不可变(修改只能创建新的)
二、 字符 及 编码基础
(字符串组成元素)
1. 字符分类:
-
普通字符:表示它本身
-
转义字符:
- 需要在引号里是字符串才能生效
- 一旦出现计划之外的特殊字符,直接使用原始字符串:r‘’
- \n :换行
- \t:水平制表符,一个Tab
- \:代表了一个反斜线字符‘\’
- ':代表了一个单引号的字符
- ":代表了一个双引号字符
-
编码字符 = 原字符:
-
定义:各种的字符、图片等转化成数字的格式
-
格式:‘\u + 四位的十六进制数’
- 注意这里十六进制不用写0x,易错
- str1 = ‘a’,和str1 = '\u0061’是一样的
- 举例:‘\u4e00abc’
-
什么时候用这个:
-
用最后一个中文时,直接’\u9fa5’
-
字符不会写时,用这个写法
-
-
2. 编码基础:
(所有东西:字符,图片等都是用数字保存到计算机的)
-
编码表:
-
ASCII表 :美国原创的码表,早期码表
A-65
a-97 -
Unicode表:万国码、统一码,是ASCII表的拓展,包含所有国家所有的语言,所有的符号
- Unicode里面使用十六进制进行保存
- 中文编码的范围:4e00 - 9fa5
-
-
编码相关操作
-
chr(编码值) - 获取编码值对应的字符
-
ord(字符) - 获取指定字符对应的编码值,返回的是十进制
-
hex(数字) - 转化为十六进制,注意前面没标注就是十进制数字
-
3.关于进制
-
关于十六进制:0-9和a-f(或A-F)组成:0ff,01b
-
一个数字默认都会当成十进制处理,需要特质某些进制的数字需要加一些特殊前缀:
- 二进制:0b, 0b01010101, 那个是0
- 八进制:0o, 0o721
- 十六进制:0x, 0x0ff
三、字符串操作
- 比较大小
- 比较第一个不相等的元素的编码值大小。(但注意不同类型数据是不能进行比较的)
- 要么都是字符串一起比较,注意字符串和编码字符:\u…是等同的 ;
- 要么ASCII码值(int类型)大小一起比较
- 增删改查:
- 查:索引
- 增:+、*
- 删:只能切片
- 改:切片
- in、not in:
- ‘hel’ in ‘hello world’ :判断前者是否被包含在后者中,必须是连续的
# 案例:统计str1中中文的个数
str1 = '换手机hss8223Kks是sjd==222'
count = 0
for i in str1:
if '一'<=i<=chr(0x9fa5):
count+=1
print(count)
# 案例:提取字符串中所有的大写字母
str2 = '涉及到MJk230023sjkU293shT=='
# 'MJUT'
for i in str2:
if 'A'<=i<='Z':
print(i)
print(type(ord('a')))
4
M
J
U
T
<class 'int'>
四、字符串的方法
重要内容总结:join会将列表转化为字符串;split会将字符串切割成列表,重点是从切割后的列表中拿到自己想要的字符串
字符串还有很多方法,不用全记住,不会的去菜鸟教程取就行了
-
‘黏贴符号’.join(序列):
- 功能:将序列用指定黏贴符号,拼成一个字符串
- 要求:序列中的所有元素必须是字符串
- 举例:
- list = [‘1’,‘2’,‘3’,‘4’]
- str1 = ‘’.join(list)
- str2 = ‘+’.join(list)
- 常用操作:
- 序列中的元素不是字符串:那就使用遍历+str(),注意不要直接str(list)
- 做类型转化,列表所有元素组成 -> 一个字符串:黏贴符号用空就行
-
字符串1.split(切割字符(,N)):
- 功能:
- 以切割字符为切割点,将字符串1切割成若干段,储存到列表中
- 从左到右,切割字符生效N次,默认N是有几个切几次
- 常用操作:
- 如果切割点在边缘/切割点连续出现:会切出空字符
- 字符串 ——> 列表:str1.split(‘切割字符’)
- 从字符串中拿到自己想要的字符:
- str1 =‘2002-10.1’
- str1.split(‘-’)[1] 拿到月份和日期
- 功能:
-
字符串1.replace(字符串2,字符串3(,N))
-
功能:将字符串1中,所有的字符串2,替换成字符串3。可以加N控制替换次数
-
常用功能:
- 替换
- 删除:str1.replace(字符串2,‘’),用空替换就好了
-
-
字符串1.strip()
-
功能:删除一个字符串两边无效的空白字符
-
拓展:
- 字符串1.rstrip()删除右边空格。
- 字符串1.lstrip()删除左边空格
- 字符串1.strip(‘/’)删除前后两边的所有指定符号(‘/’)
-
常用:就是删除前后无效空格
-
-
字符串1.find(字符串2) / 字符串1.index(字符串2) :
- 功能:
- 功能:相同都是返回字符串1中第一次字符串2出现的位置的下标值(0开始)
- 不同之处:在于找不到时,find会返回-1,index会报错
- 其他参数:还可以指定查找的起始下标和结束下标
- 功能:
以下是使用频率较低的方法
-
center、rjust、ljust、zfill:将字符串填充至指定长度
- 功能:
- str1.center(长度,填充字符):将str1填充至指定长度,str1在中间
- str1.rjust(长度,填充字符):str1,原字符放右对齐
- str1.ljust(长度,填充字符):str1,原字符放左对齐
- str1.zfill(长度):str1,原字符放中间,两边用0填充
- 功能:
-
str1.startswith(字符串) / :判断是否以指定字符开头或结尾
-
str1.isdigit()/str1.islower() /str1.isupper():判断是否是数字,全是小写字母,全是大写字母,可以结合遍历一个一个来
-
字符串1.upper()/字符串1.lower():将字母字符字符转化为大写/小写
五、字符串格式化
如何控制字符串内容变化的问题?有三种方法解决:
-
字符串拼接:
- 举例:print(‘年龄是’,age,‘岁’)
-
格式化字符串:
- message= ‘%s今年%d岁了,月薪:%f元’ %(name,age,money)
- 占位符:
- %s :字符串占位符,可以给任何数据类型占位
- %d :整数占位符,不是相应类型,也会转化后再输出
- %f :浮点占位符
- %.Nf:浮点占位符,保留N位小数
-
f-string:
- 举例:str1 = f’年龄是{age}岁’
- {提供数据的表达式:参数}, 参数来控制输出格式,有以下几种:
- {提供数据的表达式:.Nf}:控制小数位数
- {提供数据的表达式:,}:大金额逗号分隔,三位一分
- {提供数据的表达式:,.Nf}:既有大金额分隔,又控制小数位数
- {提供数据的表达式:,.N%}:显示百分比,并保留相应小数(乘100的)
- {提供数据的表达式:填充字符>填充长度} :从左边用指定字符填充至指定长度
- eg:f’{num:0>7}',将num从左边填充,至长度为7
- 注意{}中的填充字符和长度,不需要加引号
- 如果没有填充字符,默认是空格填充
- {提供数据的表达式:填充字符<填充长度} :右对齐填充至指定长度