目录
一、什么是字符串(str)
字符串是python自带的容器型数据类型
将单引号' '或者双引号" "、三个单引号''' '''、三个双引号""" """作为容器的标志,里面的每一个符号都是字符串的元素
字符串是不可变的;字符串是有序的,支持索引操作
字符串的元素又叫字符,任何文字符号都可以作为字符串的元素
str1 = 'mK1,和。😊'
print(str1)
三引号对应的字符串幼教多行字符串,字符串内容中可以直接按回车换行
str1 = """hello
world"""
print(str1)
str2 = '''hello
python'''
print(str2)
空串 ' ' 内什么都没有,空格也不行
str3 = ''
二、字符
字符串中每个独立的符号就是字符串的元素,又叫字符。
1.转义字符
字符分为两类:
1)普通字符 - 在字符串中表示符号本身的字符
2)转义字符 - 在特定的符号前加 \ 表示特殊功能或者特殊意义的字符
\n | 换行 |
---|---|
\t | 水平制表符(按一次tab键) |
\' | 表示一个普通的单引号 |
\" | 表示一个普通的双引号 |
\\ | 表示一个普通的反斜杠 |
当一个字符串中既有单引号又有双引号时,可以单双引号交替使用来避免使用转移符
例如单引号里嵌套双引号,双引号里嵌套单引号
str1 = '\tmn\n12吗'
print(str1)
str1 = 'it\'s me'
print(str1)
str1 = "it's me"
print(str1)
str1 = "i say:\"good good study!day day up!\""
print(str1)
str1 = 'i say:"good good study!day day up!"'
print(str1)
str1 = '\\name'
print(str1)
2.r字符串
在字符串的最前面加 r/R,可以让字符串中所有的转义字符功能消失(让字符串中所有的字符都变成普通字符)
一般在读取文件路径时经常使用
str1 = r'\tabc\n123\'你好'
print(str1)
str1 = r'C:\home\names\test\demo\best\a.txt'
print(str1)
3.编码字符
\u4位的十六进制编码值(u可以是小写也可以是大写)
每一个字符在字符串中都有两种表示方法:
a. 在字符串中直接提供字符
b. 通过字符编码值来使用编码字符
print('a\u0061\u9fa5')
三、编码扩展
1.字符编码
计算机底层设计原理导致计算机在存储数据的时候只存数字(存数字的二进制补码),为了能够让计算机存储文字符号,就给每一个符号关联了一个固定的数字,每次在需要保存这个符号的时候就去保存这个数字。每个符号对应的那个固定的数字就是这个符号的编码值。
2.编码表
保存字符和数字对应关系的表
1)ASCII编码表
美国人制定,只有128个字符;
数字字符在大写字母的前面、大写字母在小写字母的前面、大写字母与小写字母不连续
A - 65
a - 97
大写字母和小写字母不连续,并且差值为32
2)Unicode编码表(Python)
Unicode编码表中包含ASCII码表
Unicode编码表叫统一码又叫万国码,里面包含了世界上所有的国家、民族使用的所有的符号。
常用中文符号的编码范围:4e00 ~ 9fa5
3.编码值在python中的使用
1)chr(编码值) - 获取指定编码值对应的字符
注意:在Python中直接使用16进制数,需要在最前面加前缀:0x、0X
print(chr(97))
# 注:在python程序中直接使用16进制数,需要在最前面加前缀: 0x、0X
# print(chr(0x4e00))
for x in range(0x4DC0, 0x4DFF+1):
print(chr(x), end=' ')
2)ord(字符) - 获取指定字符对应的编码值
print(ord('a'), ord('A')) # 97 65
3)编码字符:\u4位的16进制编码值
str1 = '一\u4e00'
print(str1)
char = '是'
print('\u4e00' <= char <= '\u9fa5')
四、查 - 获取字符
字符串获取字符的方法和列表一模一样
1.查单个
字符串[索引]
message = '\thello\npython!'
print(message[-1])
print(message[0])
print(message[1])
如上图,转义字符在字符串中占一个位置,但是打印出来为空(转义字符长度为1)
2.切片
字符串[开始下标 : 结束下标]
下标和前面介绍的一样,取头不取尾
print(message[1:6]) # hello
print(message[-7:]) # python!
str1 = 'hello,python!'
print(str1[0], str1[-1], str1[-2])
print(str1[1:-1:2]) # 'el,yhn'
print(str1[1:-1])
print(str1[-3:])
3.遍历
while:
索引= 0; 长度 = len(字符串) while 索引 < 长度: 元素 = 字符串[索引] 索引+=1
for:
for 字符 in 字符串: print(字符)
五、字符串相关操作
1.数学运算
1)数学运算 +、*
字符串1 + 字符串2 - 将两个字符串合并成一个字符串
字符串 * N - 将字符串内容重复N次产生一个新的字符串
str1 = '数据分析'
str2 = 'python'
result = str2 + str1
print(result) # python数据分析
案例:
# 案例1:在str1中每个数字的后面插入一个'+'
str1 = 'mn23ks9技术0了'
# 'mn2+3+ks9+技术0+了'
new_str = ''
for x in str1:
if '0' <= x <= '9':
new_str += x + '+'
else:
new_str += x
print(new_str)
# 案例2:删除字符串str1中所有的中文字符
str1 = 'abc健康<M920..是l2集-是'
# ''+'a' -> 'a'+'b' -> 'ab' + 'c' -> 'abc' + '<' -> 'abc<' ...
new_str1 = ''
for x in str1:
if '\u4e00' <= x <= '\u9fa5':
continue
new_str1 += x
print(new_str1)
练习:
# 练习1:提取字符串str1中所有的小写字母
str1 = 'mn23ks9技MK术p0了Kn'
new_str1 = ''
for i in str1:
if 'a' <= i <= 'z':
new_str1 += i
print(new_str1)
# 练习2:将字符串str1中所有的大写字母替换成'-'
str2 = 'mn23ks9技MK术p0了Kn'
new_str2 = ''
for j in str2:
if 'A' <= j <= 'Z':
new_str2 += '-'
else:
new_str2 += j
print(new_str2)
# 练习3:删除字符串str1中所有的字母
str3 = 'mn23ks9技MK术p0了Kn'
new_str3 = ''
for k in str3:
if not ('a' <= k <= 'z' or 'A' <= k <= 'Z'):
new_str3 += k
print(new_str3)
2.in 和 not in
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串(判断字符串2中是否包含字符串1)
str1 = 'hello python'
print('h' in str1) # True
print('he' in str1) # True
print('hl' in str1) # False
3.比较运算
1)比较是否相等
print('abc' == 'acb') # False
2)比较字符串大小
两个字符串比较大小比较的是第一对不相等的字符的大小。
两个字符比较大小,比较的是编码值的大小
字符串的比较运算主要用于判断字符的性质
判断X: | |
是否是数字字符 | '0' <= x <= '9' |
是否是大写字母 | 'A' <= x <= 'Z' |
是否是小写字母 | 'a' <= x <= 'z' |
是否是字母 | 'A' <= x <= 'Z' or 'a' <= x <= 'z' |
是否是中文 | '\u4e00' <= x <= '\u9fa5' |
六、字符串相关方法
1. 字符串.join(容器) - 将容器中的元素用指定的字符串拼接成一个新的字符串。
(容器中的元素必须全部都是字符串)
案例:
list1 = ['python', 'java', 'c', 'php', 'go']
result = '+'.join(list1)
print(result) # 'python+java+c+php+go'
str1 = 'abc'
result = ' And '.join(str1)
print(result) # a And b And c
练习:
# 练习1: 创建'1+2+3+...+100'的运算表达式字符串
result = "+".join([str(i) for i in range(1, 101)])
print(result)
# 练习2:在字符串str1中的每个字符之间插入一个*
str1 = 'hello'
# 'h*e*l*l*o'
result = "*".join(str1)
print(result)
# 练习3:删除str1中所有的abc
str1 = 'a,d,w,f,ashkabc你好abchello'
print(''.join(str1.split('abc'))) # a,d,w,f,ashk你好hello
2. 字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2都替换成字符串3
字符串1.replace(字符串2, 字符串3,N) - 将字符串1中前N个字符串2都替换成字符串3
str1 = 'how are you? i am fine! thank you! and you?'
result = str1.replace('you', 'me')
print(result) # how are me? i am fine! thank me! and me?
str1 = 'how are you? i am fine! thank you! and you?'
result = str1.replace('you', 'me', 2)
print(result) # how are me? i am fine! thank me! and you?
3. 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割
返回的是列表,即将切割点换为逗号“ , ”
扩展:
str1 = 'how are you? i am fine! thank you! and you?'
result = str1.split('you')
print(result) # ['how are ', '? i am fine! thank ', '! and ', '?']
result = str1.split('you', 2)
print(result) # ['how are ', '? i am fine! thank ', '! and you?']
4.字符替换
1) str.maketrans(字符串1,字符串2) - 建立字符和字符之间的对应关系表(两个字符串长度必须一致)
2) 字符串.translate(对应关系表)
# 1) str.maketrans(字符串1,字符串2) - 建立字符和字符之间的对应关系表(两个字符串长度必须一致)
table = str.maketrans('一二三四五六七八九十百千万', '壹贰叁肆伍陆柒捌玖拾佰仟萬')
# 2) 字符串.translate(对应关系表)
str1 = '总销售额:一千五百三十七万,总成本:四八九十二万'
result = str1.translate(table)
print(result) # 总销售额:壹仟伍佰叁拾柒萬,总成本:肆捌玖拾贰萬
5.判断字母是否大小写
1) 字符.isupper() - 判断指定字符是否是大写字母,返回bool值
2) 字符串.isupper() - 判断指定字符串中的字母是否全大写字母,返回bool值
3) 字符.islower() - 判断指定字符是否是小写字母,返回bool值
# 1) 字符.isupper() - 判断指定字符是否是大写字母,返回bool值
print('a'.isupper()) # False
print('A'.isupper()) # True
# 2) 字符串.isupper() - 判断指定字符串中的字母是否全大写字母,返回bool值
print('ABC你好123'.isupper()) # True
print('AbC你好123'.isupper()) # False
# 3) 字符.islower() - 判断指定字符是否是小写字母,返回bool值
print('a'.islower()) # True
print('123'.islower()) # False
6.字母大小写转换
1)字符.upper() - 如果字符是小写字母就转换成对应大写字母
2)字符.lower() - 如果字符是大写字母就转换成对应小写字母
# 字符.upper() - 如果字符是小写字母就转换成对应大写字母
print('a'.upper()) # A
print('2'.upper()) # 2
print('afgg你是KH'.upper()) # AFGG你是KH
# # 字符.lower() - 如果字符是大写字母就转换成对应小写字母
print('afgg你是KH'.lower()) # afgg你是kh
7. 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
8.判断是否是数字
字符.isdigit() - 判断指定字符是否是数字字符
字符串.isdigit() - 判断字符串中所有的字符是否都是数字
print('m'.isdigit()) # False
print('23s44'.isdigit()) # False
9.字符串.strip() - 去掉字符串两边的空白字符
str1 = ' \n\t he llo \n\t'
print(str1.strip()) # he llo
10.查找字符索引
字符串1.find(字符串2) - 获取字符串2在字符串1中第一次出现的位置
字符串1.rfind(字符串2) - 获取字符串2在字符串1中最后一次出现的位置
(find方法和index方法都可以查找字符串某个字符的索引,但是当查找字符串中没有的字符时,index方法会报错,而find方法会显示-1——找不到)
str1 = 'mnabc123abc890abc开始abc你好'
print(str1.find('abc'))
print(str1.rfind('abc'))
print(str1.find('hello')) # -1 (找不到)
print(str1.find('abc', 5))
print(str1.find('abc', 3, 8))
print(str1.index('abc'))
print(str1.rindex('abc'))
# print(str1.index('hello')) # 报错!
5. f-string - 将变量中的内容拼接到字符串中
在字符串的最前面加f/F,就可以在字符串中通过{表达式}来提供字符串内容
name = '小明'
age = 18
print(f'{name}今年{age}岁!')
str1 = f'{name[-1]}今年{age + 10}岁!'
print(str1)
a = 100
b = 200
print(f'a:{a}, b:{b}')
print(f'{a}+{b}={a+b}')
七、容器相关函数
1)len(字符串) - 统计字符串中字符的个数
2)str(数据) - 将指定数据转换成字符串,转换的时候是直接在数据的打印值外面加引号
str(100) # '100'
list1 = [100,1.23,"abc"]
print(list1) # [100, 1.23, 'abc']
str(list1) # "[100, 1.23, 'abc']"
3)eval(字符串) - 去掉字符串外面的引号,获取引号中的数据
abc = 100
result = eval('abc') # result = abc
print(result)
num_str = '238'
result = eval(num_str)
print(result, type(result))
list_str = '[100, 200, 300, 400]'
result = eval(list_str)
print(result, type(result))
result = eval('100 + 200') # result = 100 + 200
print(result)
nums = [10, 20, 30]
result = eval('nums[-1] * 100')
print(result)
print('==================高级计算器=================')
value = input('请输入需要计算的算式:')
value = value.replace('x', '*')
value = value.replace('÷', '/')
print(eval(value))
八、格式字符串
1.字符串拼接
message = name + '今年' + str(age) + '岁!'
print(message) # 小明今年18岁!
2.格式字符串
语法:包含格式占位符的字符串 % (数据1, 数据2, 数据3,...)
注意:1)后面()中的数据必须和前面字符串中的占位符一一对应
2)如果()中只有一个数据,这个()可以省略
常用的格式占位符 | |
%s | 可以给任何类型的数据占位 |
%d | 数字占位符,并且会自动将数字转化为整数再拼接到字符串中 |
%f | 数字占位符,并且会自动将数字转化为浮点数(默认值保留6位小数) |
%.Nf | 保留N位小数 |
message = '%s今年%d岁!' % (name, age)
print(message) # 小明今年18岁!
str1 = 'a:%s,b:%d,c:%.1f' % ([10, 20, 30], 12.956, 19.8792)
print(str1) # a:[10, 20, 30],b:12,c:19.9
3.f-string
1)基本用法
在字符串的最前面加f,就可以在字符串里面通过 {表达式} 来提供字符串内容(内容就是{}中表达式的结果)
message = f'{name}今年{age}岁!'
print(message) # 小明今年18岁!
str1 = f'a:{name}, b:{10 + 20}, c:{name[-1] * 2}'
print(str1) # a:小明, b:30, c:明明
2)添加参数: {提供数据的表达式:参数}
# 2)添加参数: {提供数据的表达式:参数}
# a. .Nf - 控制数据保留N位小数
money = 23142.987
str1 = f'月薪:{money:.2f}元'
print(str1) # 月薪:23142.99元
str1 = f'年薪:{money * 12:.2f}元'
print(str1) # 年薪:277715.84元
# b. .N% / % - 让小数拼接的时候显示成百分比(N是用来控制百分比的小数位数)
total = 98
pass1 = 75
str1 = f'及格率:{pass1/total:.1%}'
print(str1) # 及格率:76.5%
# c. , - 让整数部分每三位用一个逗号隔开
money = 187892650.234
print(f'余额:¥{money:,}') # 余额:¥187,892,650.234
print(f'余额:¥{money:,.2f}') # 余额:¥187,892,650.23
# d. 符号>N、符号<N、符号^N
# 符号>N 变量一共占N位,不足位数在变量前面补‘符号’
# 符号<N 变量一共占N位,不足位数在变量后面补‘符号’
# 符号^N 变量一共占N位,不足位数,将变量放置中间,两侧补‘符号’
x = 7
num = f'20230102{x:0>5}'
print(num)