Python科学计算第五章 字符串的使用
转义字符与原始字符串
常用转义字符:
\n:换行符
\t:制表符
\\:一个反斜杠
\':单引号
\":双引号
在字符串引号前加r或R表示原始字符串,不进行任何转义
例如 r'C:\temp'
常用格式字符
%s:字符串
%c:单个字符
%d:十进制整数
%o:八进制整数
%x:十六进制整数
%e与%E:指数,基底为e与E
%f与%F:浮点数
%%:一个百分号
字符串的三种引用变量的格式化方法
1. 百分号格式化
格式化字符串:
'...%-+0m.n格式字符...'%item
第一个%:格式化开始标志
格式字符:如%s, %d等,格式化结束标志
-:左对齐
+:正数加正号 0:空位补0(不可指定其它字符),通常与最小宽度一起使用
m:最小宽度,默认补空格
.n:保留n位小数
item:待转换表达式,如一个变量
至少要有'%格式字符' % item,其余可选
示例: s = '%08.2f %-5d' % (3.14159, 123) print(s) ''' '00000003.14 123 ' '''2. str.format() 方法格式化
格式化字符串:
'...{索引:格式说明符}...'.format(表达式0, 表达式1)
占位符(冒号为格式说明符开始的标志):
{索引:格式说明符}
索引与格式说明符可都不带,可带其一,也可都带
不带索引:表达式数量必须和占位符数量一致,依次取表达式
带索引:取索引对应的表达式
不带格式说明符:直接填入原表达式计算结果
带格式说明符:原表达式计算结果按规定格式格式化后填入
索引
- 下标索引
'...{2}...{1}...'.format(表达式0, 表达式1, ...) # 填对应下标的表达式- 名字索引
'...{名b}...{名a}...'.format(名a=表达式0, 名b=表达式1, ...) # 填对应名称的表达式
格式说明符:
[[fill]align][sign][#][0][width][,][.precision][type] # 中括号表示可选可不选
fill:填充符,同时有[fill]与[0]按fill来。与align一起使用
align:数字类型对齐方式,左对对齐<,右对齐<,居中对齐^,在正负号和整数和数字间填充=
sign:+表示正数加正号、负数加符号;-表示默认的仅负数加符号
#:加前缀。若选上#,则二进制加0b,八进制加0o,十六进制加0x
0:空位补0
width:最小宽度
,:千分位加逗号
.percision:保留percision位小数,例如.2保留2位小数
type:格式字符如s, d, f
对应中文:
[[填充符]对齐方式][带正负号/只带负号][进制数加前缀][空位补0][最小宽度][千分位逗号][.保留小数位数][格式字符]
# 示例: # 名字索引 print("name is {name}, age is {age}, QQ is {qq}".format(name="Zhang san",age=40,qq="12345****")) ''' name is Zhang san, age is 40, QQ is 12345**** ''' # 下标索引与格式说明符同时使用 print("{0:,} in hex is: {0:#x}, {1} in oct is {1:#o}".format(5555,55)) # {0:,} 索引0 -> 5555 -> 格式说明符为, -> 千分位加逗号 -> 5,555 # {0:#x} 索引0 -> 5555 -> 格式说明符为#x -> 转为十六进制数加前缀 -> 0x15b3 # {1} 索引1 -> 55 -> 无格式说明符 -> 直接填入 -> 55 # {1:#o} 索引1 -> 55 -> 格式说明符为#o -> 转为八进制加前缀 -> 0o67 ''' 5,555 in hex is: 0x15b3, 55 in oct is 0o67 '''3. f 字符串格式化
格式化字符串:
f'...{表达式名1:格式说明符1}...{表达式名2:格式说明符2}...'
在字符串前加f,之后使用如上形式给出。完全支持与str.format()方法相同的格式说明符
# 示例: num1 = 5555 num2 = 55 print(f'{num1:,} in hex is: {num1:#x}, {num2} in oct is {num2:#o}') # {num1:,} -> 5555 -> 格式说明符为, -> 千分位加逗号 -> 5,555 # {num1:#x} -> 5555 -> 格式说明符为#x -> 转为十六进制数加前缀 -> 0x15b3 # {num2} -> 55 -> 无格式说明符 -> 直接填入 -> 55 # {num2:#o} -> 55 -> 格式说明符为#o -> 转为八进制加前缀 -> 0o67 ''' 5,555 in hex is: 0x15b3, 55 in oct is 0o67 '''常见等价考法
scores = 3.14 # 百分号 s3 = '%010.2f' % scores print(s3) ''' 0000003.14 ''' # str.format() s2 = '{:010.2f}'.format(scores) print(s2) ''' 0000003.14 ''' # f 字符串 s1 = f'{scores:010.2f}' print(s1) ''' '0000003.14' '''字符串常用方法
1. str.find, str.rfind, str.index, str.rindex 查找子串在str首/末次出现位置
str1.find(str2, 起, 止)
str1.index(str2, 起, 止)
str1.rfind(str2, 起, 止)
str1.rindex(str2, 起, 止)
起止均不指定表示查找整个str1。也可仅指定起始。查找str2在str1在查找范围的下标(下标从0起)。
find与index返回第一次出现位置;rfind与rindex返回最后一次出现位置。
若查找到,返回子串首字符出现的下标;若查找失败,find/rfind返回-1,index/rindex报错
str1 = '01234567890123456789' print(str1.find('01')) ''' 0 ''' print(str1.find('01', 10)) ''' 10 ''' print(str1.find('01', 1, 9)) ''' -1 # 查找失败 ''' print(str1.rfind('01')) ''' 10 ''' print(str1.index('01', 1, 9)) ''' Traceback (most recent call last): File "***.py", line 23, in <module> print(str1.index('01', 1, 9)) ~~~~~~~~~~^^^^^^^^^^^^ ValueError: substring not found ''' s = 'abc' s.find('') #0 s.rfind('') #32. str.count 返回子串出现次数
str1.count(str2)
返回str2在str1中出现次数。默认返回0
返回非重叠子串个数
print('aaaaa'.count('aa')) '''' 2 '''3. str.split, str.rsplit 分割、右分割
str.split() # 从左向右按白字符分割,返回删除白字符和空字符后的分隔列表
str.rsplit() # 从右向左按白字符分割,返回删除白字符和空字符后的分隔列表
str.split(分隔符) # 从左向右按分隔符分隔,返回删除分隔符后的分隔列表(会保留切出的空字符)
str.rsplit(分隔符) # 从右向左按分隔符分隔,返回删除分隔符后的分隔列表(会保留切出的空字符)
str = 'ab, 12,6,,\t4,, 13' # 不指定分隔符(默认按白字符分隔) print(str.split()) ''' ['ab,', '12,6,,', '4,,', '13'] # 此处按白字符(空格和换行符)分隔了,不保留空字符 ''' # 空格为分隔符 print(str.split(' ')) ''' ['ab,', '', '12,6,,\t4,,', '13'] # 指定了分隔符,保留空字符 ''' # 逗号为分隔符 print(str.split(',')) ''' ['ab', ' 12', '6', '', '\t4', '', ' 13'] # 指定了分隔符,保留空字符 '''由于指定了分隔符不会自动舍弃空字符,若需得到分隔且删除空字符后的列表,可按照如下方法:
str = 'ab, 12,6,,4,, 13' lst = str.split(',') print(lst) ''' ['ab', ' 12', '6', '', '4', '', ' 13'] # 保留切出的空字符 ''' result = [item for item in lst if item] # 空字符作为False不会被列表推导式筛选 print(result) ''' ['ab', ' 12', '6', '4', ' 13'] '''4. str.partition, str.rpartition 分割为三部分
str.partition(分隔符) # 从左向右找到str中分隔符,将str分为[分隔符前, 分隔符, 分隔符后]三部分,返回元组
str.rpartition(分隔符) # 从右向左找到str中分隔符,将str分为[分隔符前, 分隔符, 分隔符后]三部分,返回元组
5. join 字符串连接
'连接符'.join(字符串列表)
lst = ['1', '2', '3', '4'] print('+'.join(lst)) ''' 1+2+3+4 '''6. str.lower, str.upper, str.capitalize, str.title 大小写转换
str.lower():返回全小写字符串
str.upper():返回全大写字符串
str.capitalize():返回首字母大写字符串
str.title():返回仅第一个单词首字母大写字符串
7. str.replace 子串替代
str.replace(old, str2, 次数)
返回值:将str中字串old逐个替换成new,共替换够次数(不写次数则全部替换)
不改变原字符串(因字符串不可变)
str = 'abcabcdabsdabc' str1 = str.replace('abc', '36') print(str1) ''' 3636dabsd36 ''' str2 = str.replace('abc', '36', 2) print(str2) ''' 3636dabsdabc '''8. str.strip, str.rstrip, str.lstrip 删除左右指定字符
令drop为要删字符组成的字符串
将字符串对应的端删到遇到不在drop中的字符为止
str.strip(drop):从左端和右端同时删除,直到遇到不在drop中的字符
str.rstrip(drop):删str右端,直到遇到不在drop中的字符
str.lstrip(drop):删str左端,直到遇到不在drop中的字符
str = 'abcabcdabsdabc' str1 = str.strip('abc') print(str1) ''' dabsd ''' str2 = str.lstrip('abc') print(str2) ''' dabsdabc ''' str3 = str.rstrip('abc') print(str3) ''' abcabcdabsd '''eval 函数
eval(字符串)
把字符串中内容当作语句直接执行
print(eval('1+2+3')) ''' 6 '''eval会执行任意代码,不要对不安全输入使用eval
成员判断
1. in 判断子串
str1 in str2
str1为str2子串则返回True,否则返回False
2. 字符类型判断
常用几种:
str.isalnum():str非空且所有字符都是字母或数字(alpha或num,写成alnum)返回True
str.isdigit():str非空且所有字符都是数字返回True
str.isalpha():str非空且所有字符都是字母则返回True
