day8-字符串
-
1.什么是字符串(str)
1)字符串
字符串是容器型数据类型(序列),单引号和双引号是标志。引号中所有内容都是字符串的元素
2)字符串元素
字符串中元素又叫字符(在python中长度是1的字符串就可以看成字符)
a.转义字符:特殊符号前加\,表示特殊意义和功能
\' - '
\" - "
\n - 换行
\\ - \
\t - 相当于缩进
b.编码字符:\u4位16进制数 将4位16进制数对应的编码打印
1)字符编码
2)ASCII和Unicode编码表
中文对应的Unicode中的范围:0x4e00 - 0x9fa5
3)字符编码相关方法:
chr(编码值) - 将编码值转换成字符
ord(字符) - 获取字符对应的编码值
str1 = 'abc\'123'
print(str1) # abc'123
str2 = 'abc\n123'
print(str2) # abc
# 123
str2 = 'abc\\n123'
print(str2) # abc\n123
print('\u5e00') # 币
# 2.字符编码
print(chr(97)) # a
print(chr(0x1800)) # ᠀ 蒙语
for x in range(0x1800, 0x18af):
print(chr(x), end=' ')
print()
for x in range(0x1100, 0x11ff):
print(chr(x), end=' ')
print()
# 打印中文
# num = 0
# for x in range(0x4e00, 0x9fa5):
# num += 1
# print(chr(x), end=' ')
# if num % 50 == 0:
# print()
# print()
# ord
print(ord('蒋'), ord('南'), ord('轲')) # 33931 21335 36722
print(hex(ord('蒋')), hex(ord('南')), hex(ord('轲'))) # 0x848b 0x5357 0x8f72
print(ord('a')) # 97
字符串相关操作
-
1.获取字符 - 和列表获取元素一样
str1 = 'hello world!'
# 1)获取单个字符
print(str1[0]) # 'h'
print(str1[-2]) # 'd'
# 2)字符串切片
print(str1[2:6:2]) # 'lo'
print(str1[-2:-6:-1]) # 'dlro'
print(str1[2:6:-2]) # '' 空串
print(str1[3::-1]) # 'lleh'
print(str1[3:0:-1]) # lle
# 3)遍历
for char in 'abc':
print(char)
-
2.字符串操作:
1)+ 和 *
字符串1 + 字符串2 - 将字符串1和字符串2拼接在一起,产生一个新的字符串
字符串N、N字符串 - - 字符串重复出现N次产生一个新的字符串
str1 = 'abc'
str2 = '123'
print(str1 + str2) # abc123
print(3 * str2) # 123123123
- == !=:
print('abc' == 'abc') # True
print('abc' == 'acb') # False
, <, <=, >=
只能两个字符串比较大小 -- 注意:从前往后按顺序比较对应字母编码的大小
# '0' <= char <= '9' 判断是否是数字
# '\u4e00' <= char <= '\u9fa5' 判断是否是中文
# 'a' <= char <= 'z' 判断是否是小写字母
# 'A' <= char <= 'Z' 判断是否是大写字母
- in /not in
字符串1 in字符串2 - 判断字符串2中是否包含字符串1
5)len, max, min, sorted, str
字符串转换:所有数据都可以转换成字符串,转换时候是将数据放在引号中
注意:转义字符和编码字符的长度都是1
6)r语法:
在字符串的最前面加r/R,可以阻止字符串中所有的转义字符转义
str1 = '\tabc\nare\'you!\u4e00'
print(str1) # abc
# are'you!一
str1 = r'\tabc\nare\'you!\u4e00'
print(str1) # \tabc\nare\'you!\u4e00
str1 = '\tabc\\nare\'you!\u4e00'
print(str1) # abc\nare'you!一
7)格式化字符串
在字符串中用格式占位符表示字符串中不确定的部分
a.语法:包含格式占位符的字符 % (数据1, 数据2 ,...) -()中数据的个数和类型要和前面的格式占位符一一对应
b.格式占位符:
%s - 字符串
%d - 整数
%.Nf - 浮点数,N控制小数点后小数的位数
%c - 字符(可以将数字转换成字符)
注意:1)不清楚数据类型时候,都可以用 %s 来作格式占位符
2)所有的数据都可以使用%s来接收
str4 = 'a:%s, b:%d, c:%.2f, d:%f' % ('how', 100, 1.23456, 1.232)
print(str4) # a:how, b:100, c:1.23, d:1.232000
字符串相关方法
1.对齐方式:
- 字符串.center(宽度, 填充字符='') - 居中
str1 = 'abc'
print(str1.center(9, '+')) # +++abc+++ 居中
- 字符串.ljust(宽度, 填充字符='') - 左对齐
print(str1.ljust(9, '+')) # abc++++++ 左对齐
- 字符串.rjust(宽度, 填充字符= '') - 右对齐
print(str1.rjust(9, '+')) # ++++++abc
- 字符串.zfill(宽度) == 字符串.rjust(宽度, 0)
print(str1.zfill(9)) # 000000abc
2.统计子串个数
- 字符串1.count(字符串2) - 统计字符串1中字符串2的个数
str1 = 'abcdbcgfa'
print(str1.count('a')) # 2
3.获取子串下标
- 字符串.find(子串) - 查找到子串第一次出现的位置,不存在时候,返回-1
str1 = 'sdfghjkfdhsgasd'
print(str1.find('d')) # 1
- 字符串.index(子串) - 如果不存在,会报错
str1 = 'sdfhsgasd'
print(str1.index('g')) # 5
4.join方法
- 字符串.join(序列) - 将序列中的元素用字符串连接产生一个新的字符串
要求:序列中的元素必须是字符串,如果是字典,key是字符串
str2 = '+'.join('123')
print(str2) # 1+2+3
5.替换
- 字符串1.replace(字符串2,字符串3) - 将字符串1中的字符串2全部替换成字符串3
str1 = 'how are you! Im fine, thank you! and you?'
new_str1 = str1.replace('you', 'YOU')
print(new_str1) # how are YOU! Im fine, thank YOU! and YOU?
- 字符串1.replace(字符串2, 字符串3,N) -- 将字符串1中的前N个字符串2替换成字符串3
new_str1 = str1.replace('you', 'me', 2)
print(new_str1) # how are me! Im fine, thank me! and you?
6.字符串切割
- 字符串1.split(字符串2) - 将字符串2作为切割点切割字符串1, 返回一个列表
str1 = 'how are you! Im fine, thank you! and you?'
str_list = str1.split(' ')
print(str_list) # ['how', 'are', 'you!', 'Im', 'fine,', 'thank', 'you!', 'and', 'you?']
str_list = str1.split('!')
print(str_list) # ['how are you', ' Im fine, thank you', ' and you?']
7.将第一个字符变成大写
- 字符串.capitalize()
str = 'this is string'
print (str.capitalize()) # This is string
8.endswith()方法
- 字符串1.endswith(字符串2) - 判断字符串1是否以字符串2结尾
str1 = 'hello world!!'
print(str1.endswith('!!')) # True
9.lower() - 将字符串中所有大写字符转小写
- 字符串.lower()
str1 = 'JNKGJDsjdjjmc'
print(str1.lower()) # jnkgjdsjdjjmc
10.upper() - 将字符串中小写字母全部转成大写
- 字符串.upper()
str1 = 'ghjkcvb'
print(str1.upper()) # GHJKCVB
11.max() - 获取字符串中最大的字母
- max(字符串)
str1 = 'ghjkslieukd'
print(max(str1)) # u
12.rfind() - 类似find函数,不过是重右边查找
- 字符串1.rfind(字符串2,开始下标,结束下标)