一、字符串和字符
1.什么叫字符串(str)
字符串是容器型数据(元素只能是字符),将' '/" "/''' '''/""" """作为容器标志,
容器中的元素全是字符
不可变的(不支持增删改),有序的(支持下标操作)
2.字符串中的元素 - 字符
python中只有字符的概念,没有对应的数据类型。引号只有一个元素的字符串可以看成一个字符
字符串又叫字符集
1)字符串中的字符 - 原则上任何可以通过键盘输入或者从其他地方复制粘贴的所有符号都可以作为字符
a.普通字符:在字符串中能够代表符号本身的字符(没有特殊意义和特殊功能的符号)
b.转义字符:在字符串中有特殊意义和特殊功能的符号的组合,一般是以\开头的
常用转义字符
\n - 换行
\ ' - 表示'本身
\ " - 表示"本身
\t - 表示一个缩进(tab)
\ \ - 表示一个\
\u四位的16进制数 - 获取4位十六进制数作为编码值对应的字符
注意:所有的转义字符的长度都是1
c.编码字符
2)阻止转义:在字符串的最前面加r/R可以让当前字符串中所有的转义字符失效(所有的的符号在字符串中都表示这个符号本身)
str1 = r'\tasd\n'123'
3.字符编码
计算机不能直接存储字符(符号),只能存储数字,为了能够存储字符,把每个字符关联了一个固定的数字(这个固定的数字就是对应的字符的编码)
字符和数字的一一对应关系就是编码表
常用的编码表:ASCII码表和Unicode编码表(python)
1)ASCII码表 - 在计算机中采用一个字节保存一个字符(128个字符),字符包含了所有的字母、数字和美国常用符号
0~9:编码值从48开始一次增加到57
大写字母的编码值(65~90) < 小写字母的编码值(97~122)
大写字母和小写字母不是紧挨着的
2)Unicode编码表是ASCII码表的扩展,包含了世界上所有的国家所有的语言对应的符号(总共有65536个符号)
ASCII码:0~127
中文编码值范围:4E00~9FA5
1.编码字符: \u四位十六进制编码值
str1 = 'abc\u50ff'
print(str1) # abc僿
2.chr(编码值) - 获取编码值对应的字符
num = 0
for x in range(0x4E00, 0x9FA5+1):
print(chr(x), end=' ')
num += 1
if num % 30 == 0:
print()
3.ord(字符) - 获取指定字符对应的编码值
print(hex(ord('王')), hex(ord('祥'))) # 0x738b 0x7965
二、字符串操作
1.查 - 获取字符(和list获取元素的方式一样)
1)获取单个字符:字符串[下标]
注意:一个空格是一个字符;tab键是4个4空格,对应4个字符;\t对应一个字符
str1 = '\thello Python!'
print(str1[-2]) # n
print(str1[2]) # e
2)切片:字符串[开始下标:结束下标:步长]
print(str1[2:]) # ello Python!
print(str1[1:-1:2]) # hloPto
print(str1[:3:-1]) # !nohtyP ol
3)遍历:
a.直接遍历元素,
b.通过下标遍历元素,
c.枚举(enumerate)
for index, item in enumerate(str1):
print(index, item)
2.相关操作
1)运算符:
a.+,* —— 和list相同
b.==,!=,is
c.>,<,>+,<+
字符串1 > 字符串2
字符串比较大小比较的是字符串编码值的大小
应用:
判断字符是否是大小写字母
判断是否是中文: '\u4e00' <= char <= '\u9fa5'
判断时候是数字: '0' <= char <= '9'
2)in / not in
字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1
3)相关函数:len,str,sorted,reverse
a.len(字符串)
b.str(数据) - 所有的数据都可以转换成字符串;直接将原数据的打印值加引号
c.sorted(字符串) - 按字符串编码值的大小排序,生成新的的列表
str1 = 'asdPsdqE5'
print(sorted(str1)) # ['5', 'E', 'P', 'a', 'd', 'd', 'q', 's', 's']
print(''.join(sorted(str1))) # 5EPaddqss
三、格式字符串
1.格式占位符
a.语法:包含格式占位符的字符串 % (值1, 值2, 值3,...)
b.说明:
格式占位符 - 格式占位符有哪些是固定,使用的时候和字符串中变化的数据的类型相关
%s - 字符串(从可读性来说,任何类型都可以用%s站位)
%d - 整数;
%-Nd - 整数,N约束数字最后的长度,如果不够后面补空格
%Nd - 整数,N约束数字最后的长度,如果不够前面补空格
%f - 浮点数
%.Nf - 浮点数,N约束小数点N后的小数位数(会四舍五入),不约束默认为6位
% - 固定写法
() - 固定写法;如果值发的个数是1可以省略
值 - 任何有结果的表达式,值的个数、类型和前面占位符的个数以及类型保持一致
name = 's'
age = 12
print("我是%s,今年%d岁,我有%.2f元" % (name, age, 100)) # 我是s,今年12岁,我有100.00元
2.format
一个带有{}的字符串.format(值1, 值2, 值3,...)
# 用法1
print('我是{},今年{}岁'.format('雨天', 18)) # 我是雨天,今年18岁
# 用法2:{N} N从0开始一次增加,分别表示format中第0个值,第1个值,...
print('我是{0}, 年龄是:{1},今年{1}岁'.format('ssr', 18)) # 我是ssr, 年龄是:18,今年18岁
print("数据1:{1},数据2:{0},数据3:{1},".format(10, 20)) # 数据1:20,数据2:10,数据3:20,
# 用法3:[key]
# '{key1}, {key2}'.format(key1=值1, key2=值2) -> '值1,值2'
print('我是{name}, 年龄是:{age},今年{age}岁'.format(name='ssr', age=18)) # 我是ssr, 年龄是:18,今年18岁
# 用法4:用列表元素给占位符赋值
list1 = [1, 2, 3, 4, 5]
print('{0[1]},{0[0]},{0[3]}'.format(list1))
# 用法5:用字典的值给占位符赋值
student = {'name': '小明', 'age': 20, 'id': '001', 'score': 100}
print('{name}今年{age}岁,学号:{id},考了{score}'.format(**student)) # 小明今年20岁,学号:001,考了100
format(**student) -> format(name='小明', age=20, id='001', score=100)
其他写法
# 约束小数
print('圆周率:{:.2f}'.format(3.1415926))
# 约束整数宽度
print('整数:{:0>4d}。'.format(25)) # 整数:0025
print('整数:{:0<4d}。'.format(25)) # 整数:2500。
print('整数:{:+>4d}。'.format(25)) # 整数:++25。
# 分隔
print('大的整数:{:,}'.format(100000000)) # 大的整数:100,000,000
# 百分比
print('百分比:{:.2%}'.format(0.25)) # 百分比:25.00%
四、字符串相关方法
1.字符串.capitalize() —— 将字符串的首字母变成大写字母
str1 = 'python'
str2 = str1.capitalize()
print(str2)
2.center/ljust/rjust/zfill
字符串.center(宽度,填充字符) xabcx
字符串.ljust(宽度,填充字符) abcxx
字符串.rjust(宽度,填充字符) xxabc
字符串.zfill(宽度) == 字符串.rjust(宽度, '0')
print('abc'.center(8, 'x')) # xxabcxxx
print('abc'.ljust(5, 'x')) # abcxx
print('abc'.rjust(5, 'x')) # xxabc
num1 = 21
print(str(num1).zfill(3)) # 021
字符串1.count(字符串2) -> 统计字符串1中字符串2出现的次数
字符串1.count(字符串2,开始下标,结束下标) -> 统计字符串1开始下标到结束下标范围内字符串2出现的次数
str2 = 'how are you? i am fine! thank you!'
print(str2.count('a')) # 3
print(str2.count('ou')) # 2
print(str2.count('you', 0, 15)) # 1
# 4.
str1 = 'abc'
str2 = 'how are you'
# 判断str2是否以str1结尾
print(str2[-len(str1):] == str1)
5.字符串查找
字符串1.find(字符串2) - 获取字符串2第一次在字符串1中出现的位置(用大于等于0的下标值表示)
字符串不存在的时候,结果为-1
字符串1.index(字符串2) - 获取字符串2第一次在字符串1中出现的位置(用大于等于0的下标值表示)
字符串不存在的时候会报错
str2 = 'how are you? i am fine! thank you!'
print(str2.index('you')) # 8
print(str2.find('you123')) # -1
# print(str2.index('you123')) # ValueError: substring not found
6.join
字符串.join(序列) - 将序列中的元素用字符串连接在一起产生一个新的字符串;
序列中的元素是字符串
str3 = '+'.join('abc')
print(str3) # a+b+c
str4 = ','.join(['name', 'age'])
print(str4) # name,age
str5 = ''.join({'a': 1, 'b': 1})
print(str5) # ab
7.字符串替换
1)字符串1.replace(字符串2, 字符串3) -> 将字符串1中所有的字符串2都替换成字符串3
每次只能替换一个
2)
字符串.maketrans(字符串2, 字符串3) -> 创建字符串2和字符串3一一对应的映射表
字符串.translate(替换的映射表)
str2 = 'how are you? i am fine! thank you!'
new_str2 = str2.replace('you', 'me')
print(new_str2) # how are me? i am fine! thank me!
table = str.maketrans('a!', 'b+')
new_str2 = str2.translate(table) # 将字符串str2中所有的a都替换成b,所有的!都替换成+
print(new_str2) # how bre you? i bm fine+ thbnk you+
8.字符串切割
字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点切成多分
str2 = 'how are you? i am fine! thank you!'
print(str2.split(' ')) # ['how', 'are', 'you?', 'i', 'am', 'fine!', 'thank', 'you!']