2215 字
11 分钟
Python-字符串
2023-01-19

参考资料: 【Python教程】《零基础入门学习Python》最新版(2022年12月26日更新)

字符串#

关于字符串,主要分为两大块知识:一块是各种字符串相关函数,另一块是format字符串和f-string

1. 字母大小写转换#

函数功能
str.capitalize()首字母大写,其余小写
str.casefold()字母全变为小写,可以支持多种语言
str.title()每个单词首字母都大写,其余小写
str.swapcase()字母大小写全部和原来相反
str.upper()字母全变为大写,英语之外可能不支持
str.lower()字母全变为小写

注意: 这些函数都没有直接改变str指向的字符串,而是按规则生成了一个新的字符串,即str还是与原本的字符串挂钩 因此要改变str时:str = str.function()

2. 对齐函数#

函数功能
str.center(width, fillchar=’ ‘)width设置总字符数,fillchar设置填充字符,使str居中
str.ljust(width, fillchar=’ ‘)width设置总字符数,fillchar设置填充字符,使str左对齐
str.rjust(width, fillchar=’ ‘)width设置总字符数,fillchar设置填充字符,使str右对齐
str.zfill(width)width设置总字符数,str左侧用0填充,若str是数字字符串,可以支持正负数

3. 查找函数#

函数功能
str.count(char, start, end)返回str在所选范围char的个数,起止位置为可选参数
str.find(char, start, end)返回str在所选范围从左往右第一个为char的下标,找不到则返回-1,起止位置为可选参数
str.rfind(char, start, end)返回str在所选范围从右往左第一个为char的下标,找不到则返回-1,起止位置为可选参数
str.index()返回str在所选范围从左往右第一个为char的下标,找不到则报错,起止位置为可选参数
str.rindex()返回str在所选范围从右往左第一个为char的下标,找不到则报错,起止位置为可选参数

4. 转换函数#

函数功能
str.expandtabs(num)将str中所有Tab转换为num个空格
str.replace(old, new, count=-1)将str中old转换为new,可选参数count设置转换个数,默认-1表示全部转换
str.translate(table)table表示一个转换规则,可由maketrans()生成,可以实现table中对应字符的转换
str.maketrans(origin, trans, ignorestr)生成一个转换规则,表示将origin中的对象转换为trans中对应的对象,与ignorestr相同的字符串不会被转换

5. 判断函数#

这类函数会根据判断的结果返回bool类型数值

函数功能
str.startswith(prefix, start, end)判断是否以prefix开头,prefix可以为元组,元组中任意一个元素满足即可,起始位置为可选参数
str.endswith(suffix, start, end)判断是否以suffix结尾,suffix可以为元组,元组中任意一个元素满足即可,起始位置为可选参数
str.isupper()判断是否全为大写
str.islower()判断是否全为小写
str.istitle()判断str是否为标题格式
str.isalpha()判断是否全为字母
str.isascii()判断是否都为ascii
str.isspace()判断是否都为空白字符(空格、Tab、换行符等)
str.isprintable()判断是否都可以打印
str.isdecimal()判断是否数字的一个标准(范围最小)
str.isdigit()判断是否数字的一个标准(范围适中)
str.isnumeric()判断是否数字的一个标准(范围最大)
str.isalnum()判断是否全为字母或数字
str.isidentifier()判断str是否为Python的合法标识符

5.1 prefix/suffix为元组的例子

if "她爱Python".startswith(("我", "你", "她")):
print("总有人爱Python")
# "总有人爱Python"

5.2 isdecimal() & isdigit() & isnumeric() 区别

x = "123"
# All: True
x = "2²"
# x.isdecimal(): False
# x.isdigit() & x.isnumeric(): True
x = "一二三"
# x.isdecimal() & x.isdigit(): False
# x.isnumeric(): True
x = "我不是数字"
# All: False

6. 截取函数#

函数功能
str.strip(chars=None)从左右两侧删除选定字符,直到遇到第一个非选定字符时停止;默认None表示空白字符,chars是字符串,会被视为集合
str.lstrip(chars=None)从左侧删除选定字符,直到遇到第一个非选定字符时停止;默认None表示空白字符,chars是字符串,会被视为集合
str.rstrip(chars=None)从右侧删除选定字符,直到遇到第一个非选定字符时停止;默认None表示空白字符,chars是字符串,会被视为集合
str.removeprefix(prefix)去除前缀prefix
str.removesuffix(suffix)去除后缀suffix

7. 拆分与拼接#

函数功能
str.partition(char)从左往右找到第一个为char的字符,以此为结点拆分得到一个三元组
str.rpartition(char)从右往左找到第一个为char的字符,以此为结点拆分得到一个三元组
str.split(sep=None, maxsplit=-1)将str拆分为多个字符串并返回其组成的列表;sep设置拆分字符,默认为空白字符;maxsplit设置最大分割数,默认-1表示全部拆分
str.rsplit(sep=None, maxsplit=-1)从右往左开始拆分,功能与split()相同
str.splitlines(save=False)以换行符为拆分字符将str拆分,可识别不同系统的换行符;可选参数save控制是否保留换行符到其前面的子串
str.join(iterable)以str为结点连接iterable中各个元素,str可为空字符串

7.1 不同系统的换行符

Unix, Linux: \n Max OS: \r Windows: \r\n

7.2 join() 比 + 的优势在于 join() 的处理效率远高于 +

8. format字符串#

8.1 基础用法#

问题来源:

year = 2023
month = 1
print("现在是 year 年 month 月")
# 现在是 year 年 month 月

类似于 C/C++ 中的转义字符,Python 的字符串也需要类似转义字符的存在

year = 2023
print("现在是 {}{} 月".format(year, month))
# 现在是 2023 年 1 月

{}中可以通过写下标选择format()中的数据,且可以重复使用

print("{}{}".format("我", "你"))
# 我爱你
print("{1}{0}".format("我", "你"))
# 你爱我
print("{0}{0}{1}{2}".format("mo", "ye", "yu"))
# momoyeyu
print('{2},{1},{0}'.format(*'abc'))
# c,b,a

还可以使用关键字参数

print("我是{name},我喜欢{fav}".format(name = "墨末夜羽", fav = "吉他"))
# 我是墨末夜羽,我喜欢吉他
print("我是{fav},我喜欢{name}".format(name = "墨末夜羽", fav = "吉他"))
# 我是吉他,我喜欢墨末夜羽

8.2 语法格式#

format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type] fill ::= # 填充字符 align ::= ”<” | ”>” | ”=” | ”^” # 填充位置 sign ::= ”+” | ”-” | ” ” # 显示符号 width ::= integer # 打印宽度 precision ::= integer # 浮点数精度 type ::= “b” | “c” | “d” | “e” | “E” | “f” | “F” | “g” | “G” | “n” | “o” | “s” | “x” | “X” | ”%” # 数据表达方式

8.2.1 示例

"{1:^10}{0:<10}".format("123", "456")
# ' 456 123 ' # 居;左对齐
"{:08}{:08}".format(1024,-1024)
# '00001024-0001024' # 填充0;0不影响符号
"{a:*>10}|{b:*<10}".format(a=120,b=110)
# '*******120|110*******' # 选择*为填充字符
"{:+,}||{:-_}".format(1234567,7654321)
# '+1,234,567||7_654_321' # 正数显示正号,每3位用(,)分开;负数显示负号(默认就显示),每3位用(_)分开
"{:.2f}||{:.3g}".format(12.3456,12.345)
# '12.35||12.3' # 小数点后保留2位数;总共保留3位数
"{:.4}".format("Momoyeyu")
# "Momo" # 保留前4个字符(对数字不可用)
"{0:d}||{0:c}||{0:b}||{0:o}||{0:x}||{0:#b}||{0:#o}||{0:#x}||{0:e}".format(127)
# '127||\x7f||1111111||177||7f||0b1111111||0o177||0x7f||1.270000e+02' # 详情看下表

8.2.2 关于type

含义
b以二进制输出
#bb的基础上,会在数前标0b,表示这是二进制数
c以Unicode输出
d以十进制输出
o以八进制输出
#oo的基础上,会在数前标0o,表示这是八进制数
x以十六进制输出
#xx的基础上,会在数前标0x,表示这是十六进制数
X以十六进制输出
#XX的基础上,后者会在数前标0X,表示这是十六进制数
n类似于’d’,但会根据语言环境的分隔符插入到恰当位置
None什么都不填,则对整数默认是’d’,对小数默认精度与所给值一样
e以科学计数法输出,默认精度6位
E以科学计数法输出,默认精度6位
f以定点表示法输出,默认精度6位(非数用’nan’标示,无穷用’inf’标示)
F以定点表示法输出,默认精度6位(非数用’NAN’标示,无穷用’INF’标示)
g通用格式,小数以’f’输出,大数以’e’输出
G通用格式,小数以’F’输出,大数以’E’输出
%以百分比形式输出,默认精度同f,可通过’.num%‘设置精度(num为一个数)

8.2.3 format字符串综合运用

"{:{fill}{align}{width}.{prec}{typ}}".format(3.1415, fill='+', align='^', width=10, prec=3, typ='g')
# '+++3.14+++'

9. f-string#

也叫f字符串,字符串前加’f’或’F’,其中{}内的变量名可以引用,算式可以计算,内容也可以格式化输出

9.1 示例

year = 2023
f"现在是 {year} 年"
# '现在是 2023 年'
F"1+2={1+2}, 2²={2*2}"
# '1+2=3, 2²=4'
f"{-110:0=10}||{3.1415:.2f}"
# '-000000110||3.14'

9.2 f-string综合运用

fill, align, width, prec, typ = '+', '^', 10, 3, 'g'
f"{3.1415:{fill}{align}{width}.{prec}{typ}}"
# '+++3.14+++'

f-string的效率比format字符串效率要高,但由于其是Python3.6才产生,考虑到兼容性,format字符串使用会更多

博客桌宠