1、什么是字符串(str)
- 字符串是容器型数据类型,将一对单引号(' ')、一对双引号(" ")、三个单引号(''' ''')、三个双引号(""" """)作为容器标志,容器中的元素全是字符串
- 不可变(不支持增删改),有序(支持下标操作)
str1 = 'hello'
str2 = "hello"
str3 = '''hello'''
str4 = """hello"""
print(type(str1), type(str2), type(str3), type(str4))
# <class 'str'> <class 'str'> <class 'str'> <class 'str'>
2、字符串中的元素 -- 字符
- python中只有字符的概念,没有字符对应的数据类型。引号中只有一个元素的字符串可以看成一个字符。
- 字符串又叫字符集。
1)字符串中的字符
原则上任何可以通过键盘输入或者从其他地方复制粘贴的所有的符号都可以作为字符
a、普通字符:在字符串中能够代表符号本身的字符(没有特殊意义和特殊功能的符号)
b、转义字符:在字符串中有特殊意义和特殊功能的符号的字符的组合,这些组合一般是以反斜杠()开头的
\n --> 换行
\' --> 表示引号(')本身
\t --> 一个缩进(tab键)
\\ --> 表示反斜杠(\)
\(u4位的16进制数) --> 编码字符(获取4位16进制数作为编码值对应的字符)
所有的转义字符的长度都是1
2)阻止转义:在字符串的最前面加r/R,何以让当前字符串所有的转义字符失效(所有的符号在字符串中都表示这个符号本身)
str1 = 'abc\n123'
print(str1)
str1 = 'abc\\n123'
print(str1)
str1 = 'abc\u4edf'
print(len(str1))
print(str1)
str1 = r'\tabc\'12344'
print(str1)
3、字符编码
- 计算机不能直接存储字符(符号),只能存储数字;
- 为了能够存储字符,把每一个字符关联了一个固定的数字(这个对应的数字对应的字符编码)
3.1、字符和数字一一对应关系的就是编码表:ASCII码表,Unicode编码表(python)
1)ASCII编码表 --> 在计算机中采用一个字节保存一个字符(总共只有128个字符),字符包含了所有的字母、数字和美国常用符号
0-9:编码值从48开始依次增加
大写字母编码值:从65开始依次增加
小写字母编码值:从97开始依次增加
大写字母编码值与小写字母编码值不是紧挨着
2)Unicode编码表是ASCII码表的扩展,包含了世界上所有的国家、所有的语言对应的符号(总共有65536个符号)
ASCII:0 - 127
中文编码值范围:0x4e00 - 0x9faf
3.2、编码字符:\u4位16进制编码值
print('\u4e00')
3.3、chr(编码值) -- 直接获取编码值对应的字符
- 打印Unicode表所有的汉字
num = 0
for i in range(0x4e00, 0x9fa5+1):
print(chr(i), end=' ')
num += 1
if num % 30 == 0:
print('')
3.4、ord(字符) --> 获取指定字符对应的编码值
print(hex(ord('杨')))
print(hex(ord('毓')))
print(hex(ord('德')))
4、字符串相关操作
4.1、查
- 获取字符(和列表获取元素的方式一样)
1)获取单个字符:字符串[下标]
str1 = 'hello python'
print(str1[-1]) # n
2)切片:字符串[开始下标:结束下标:步长]
str1 = 'hello python'
print(str1[1:-1:2]) # el yh
print(str1[:3:-1]) # nohtyp o
3)遍历
for 下标, 元素 in enumerate(序列):
循环体
for index, item in enumerate(str1):
print(index, item)
4.2、相关的操作
1)运算符:a、+,*
str1 = 'abc'
str2 = '123'
print(str1 + str2)
print(str1 * 2)
# b、==, !=
print('abc' == 'abc') # True
print('abc' == 'acb') # False
2)>, <, >=, <=
- 比较的是字符串编码值的大小
判断字符是否是小写字母:'a' <= char <= 'z'
判断字符是否是大写字母:'A' <= char <= 'Z'
判断字符是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z'
判断字符是否是中文:'\u4e00' <= char <= '\u9fa5'
判断字符是否是数字:'0' <= char <= '9'
str1 = 'abc'
str2 = 'b'
print(str1 > str2) # False
3)in / not in
字符串1 in 字符串2 --> 判断字符串2中是否包含字符串1
str1 = 'abc 123'
str2 = 'b'
print(str2 in str1) # True
print('abc' in str1) # True
print('ac' in str1) # False
4)相关函数:len,str,sorted,reversed
a、len(字符串)
print(len('\tabd\n123')) # 8
print(len(' abd\n13')) # 7
print(len(' ')) # 1
b、str(数据) 所有的数据都可转为字符串;直接将数据的打印值加引号
c、sorted(字符串) --> 按字符编码值排序;
str1 = 'python12H'
print(sorted(str1)) # ['1', '2', 'H', 'h', 'n', 'o', 'p', 't', 'y']
5、格式字符串
5.1、格式占位符
a、语法:包含格式占位符的字符串 %(值1,值2,值3,...)
b、说明:
格式占位符:有哪些是固定的,使用的时候和字符串中变化的数据类型相关
%s -- 字符串(任何类型都可以用%s占位)
%d -- 整数;
%-Nd -- 整数;N约束数字最后的长度,如果不够后面补空格
%Nd -- 整数;N约束数字最后的长度,如果不够前面补空格
%f -- 浮点数:小数后面保留6位小数
%.Nf -- 浮点数:N约束小数点N后的小数位数(四舍五入)
%c -- 字符
% --> 固定写法
() --> 固定写法;如果值的个数是1可以省略
值 --> 任何有结果的表达式
name = input('请输入姓名:')
print('你好%s' % name)
print('%c' % 97) # a
5.2、format
- 更多操作请点击
- 一个带有{}的字符串.format(值1,值2,值3,...)
用法1:让空的{}个数和format中值的个数保持一致
print('{}大帅哥今年才{}岁'.format('杨', 18))
用法2:{N} -- N从0开始依次增加,分别表示format中的第0,1,2,3,..个值
print('{1}大帅哥今年才{0}岁,他的女朋友也是{0}岁'.format(18, '杨'))
用法3:{key}
- '{key1},{key2},...'.format(key1=值1,key2=值2, ...)
print('{name}大帅哥今年才{age}岁,他的女朋友也是{age}岁'.format(age = 18, name = '杨'))
用法4:用列表元素给占位符赋值
list1 = [12,23,32,21]
print('{0[1]}, {1}, {0[3]}'.format(list1, '张三'))
用法5:用字典的值给占位符赋值
student = {'name': '旺财', 'age': 2, 'id': 'D001', 'score': 34}
print('{name}今年{age}岁了, 学号是{id}, 考了{score}分'.format(**student))
6:其他的用法
约束小数位数
print('圆周率:{:.2f}'.format(3.1415926))
约束小数宽度
print('整数:{:0<4d}'.format(12))
print('整数:{:0>4d}'.format(12))
分割
print('大的整数:{:,}'.format(1000000000))
百分比
print('百分比:{:.2%}'.format(0.123))
6、字符串的相关方法
capitalize
- 字符串.capitalize() 首字母大写
str1 = 'python'
new_str1 = str1.capitalize()
print(str1, new_str1)
center/ljust/rjust/zfill
- 字符串.center(宽度, 填充字符)
- 字符串.ljust(宽度, 填充字符)
- 字符串.rjust(宽度, 填充字符)
- 字符串.zfill(宽度) = 字符串.rjust(宽度, 填充字符)
print('abc'.center(7, '+')) # ++abc++
print('abc'.ljust(7, '+')) # abc++++
print('abc'.rjust(7, '+')) # ++++abc
print('abc'.zfill(7)) # 0000abc
count
- 字符串1.count(字符串2) --> 统计字符串1中字符串2出现的次数
- 字符串1.count(字符串2, 开始下标, 结束下标) --> 统计字符串1中开始下标到结束下标范围内字符串2出现的次数
str1 = 'how are you? I am find! Thank you!'
print(str1.count('you')) # 2
print(str1.count('a')) # 3
print(str1.count('a', 0, 16)) # 2
endswith
- 字符串1.endswith(字符串2) --> 字符串1是否以字符串2结尾
str1 = 'python'
print(str1.endswith('n')) # True
print(str1.startswith('p')) # True
find/index
- find/index --> 字符串查找)
- 获取字符串2第一次在字符串1出现的位置(用大于等于0的下标值表示)
字符串1.find(字符串2) --> 字符串2不存在返回结果是-1
字符串1.index(字符串2) --> 字符串2不存在会报错
str1 = 'how are you? I am find! Thank you!'
print(str1.index('a')) # 4
print(str1.find('a')) # 4
join
- 字符串.join(序列) --> 将序列中的元素用字符串连接到一起产生一个新的字符串
- 序列:序列中的元素是字符串
str1 = 'abc'
str2 = '+'.join(str1)
print(str2)
str3 = ['name', 'age', 'sex']
print(''.join(str3))
replace/ maketrans和translate 字符串替换
- replace
字符串1.replace(字符串2, 字符串3) --> 将字符串1中所有的字符串2替换成字符串3 - maketrans和translate配套使用
字符串1.translate(str.maketrans(字符串2,字符串3)) --> 将字符串1中所有的字符串2替换成字符串3
网友评论