Python 字符串
1. 字符串了解
字符串最大用途是 设置其他值的格式,来完成拆分,合并,和查找等功能
1.1 字符串的基本操作
相对列表和元组而言,切片/索引/乘法/成员资格.长度.最小值.最大值均可用于字符串.
str1 = "你好,2018年,ai 中国" str2 = max(str1) # 最大字符 print(str2) print(type(str2)) print("*****完美分割线1******\n") str2 = min(str1) # 最小字符,此次最小为空格符号 print(str2) print(type(str2)) print("*****完美分割线2******\n") str2 = len(str1) # 长度计算:计算结果为整数 print(str2) print(type(str2)) print("*****完美分割线3******\n") str2 = str1 * 2 # 字符串 乘法:乘法结果并无空格 print(str2) print(type(str2)) print("*****完美分割线4******\n") str2 = str1 + str1 # 字符串 相加: 相加结果中并无空格 print(str2) print(type(str2)) print("*****完美分割线5******\n") str2 = str1[0] # 索引动作:单个子元素位置索引 print(str2) print(type(str2)) print("*****完美分割线6******\n") str2 = str1[2:4] # 索引动作:子元素位置自2开始,至3结束 print(str2) print(type(str2)) print("*****完美分割线7******\n") str2 = str1[::2] # 索引动作:子元素位置自2开始,至3结束 print(str2) print(type(str2)) print("*****完美分割线8******\n") str2 = "你好" # 成员资格 in : 返回True 或者Flase print(str2 in str1) print(type(str2 in str1)) print("*****完美分割线9******\n") str2 = "你好,2018年,ai 中国" print(str2 == str1) # 比较运算符 字符串支持 print(type(str2 in str1)) print("*****完美分割线10******\n") lst1 = ["你好","2018年","ai","中国"] lst2 = ["你好","2018年","ai","中国"] print(lst2 == lst1) # 比较运算符 字符串支持 print(type(lst2 in lst1)) lst3 = lst1[0] # 索引返回的是 ,与当前子元素的格式一样 print(lst3) print(type(lst3)) print("*****完美分割线11******\n") str1 = "你好","2018年","ai","中国" # 此为元组 print(str1) print(type(str1))
效果如下:
年 <class 'str'> *****完美分割线1****** <class 'str'> *****完美分割线2****** 14 <class 'int'> *****完美分割线3****** 你好,2018年,ai 中国你好,2018年,ai 中国 <class 'str'> *****完美分割线4****** 你好,2018年,ai 中国你好,2018年,ai 中国 <class 'str'> *****完美分割线5****** 你 <class 'str'> *****完美分割线6****** ,2 <class 'str'> *****完美分割线7****** 你,08,i中 <class 'str'> *****完美分割线8****** True <class 'bool'> *****完美分割线9****** True <class 'bool'> *****完美分割线10****** True <class 'bool'> 你好 <class 'str'> *****完美分割线11****** ('你好', '2018年', 'ai', '中国') <class 'tuple'>
2.字符串的格式
字符串的格式,是调用字符串方法 format 实现字符串指定位置的赋值,
字符串 str = " ", 而格式字符串为 str = " { }". format() 或者 " { } { } { } " . format()
或 str = " {{ }}" . format ( ).这取决于你希望结果中是否包含{},但{} 内 不可以有空格
区分 赋值替换的位置 赋的值
替换字段包含以下信息
字段名 : 索引 或标识符 ,指出设置哪个值的格式,并使用结果 来替换字段,也可以指定特定值的特定部分,如列表元素
str1 = "{a} {b} {c} {d}" print(str1.format(a=1, b=2, c=3, d=4)) #最简单情况下,只需向format()函数提供要设置其格式的未命名参数,并在格式字符串中,使用未命名字段.此时将按顺序将字段和参数配对. print("*****完美分割线1******\n") str2 = "{a}{}".format(2,a = 1) #使用未命名字段.此时将按顺序将字段和参数配对,你也可以给参数指定名称,这种参数将用于对于的替换字段中,也可以混合使用. print(str2) print(type(str2)) print(str2[1]) print(type(str2[1])) #格式为字符串. print("*****完美分割线2******\n") str3 = "{0}{a}".format(2,a = 1) #格式为字符串. print(str3) print(type(str3)) print(type(str3[0])) #格式为字符串.
效果如下
1 2 3 4 *****完美分割线1****** 12 <class 'str'> 2 <class 'str'> *****完美分割线2****** 21 <class 'str'> <class 'str'>
转换标志 : 跟在! 感叹号后面的部分.当前支持的字符包含 r (repr) s (str) a(ascii) ,如果你指定了转换标志,将不适用对象的本身的格式设置机制,而是使用指定函数的将 对象转换为字符串,再做进一步设置.
print("*****完美分割线3******\n") lst1 = ["China", "American", "Russia", "European Union"] str4 = "{}{}{}" str5 = "{}{}{}".format(lst1,lst1,lst1) # 参数可为字符串或列表 print(lst1) print(str4) print(str5) print(type(str5)) print("*****完美分割线4******\n") lst2 = ["China", "American", "Russia", "European Union"] str6 = "I LOVE {}".format(lst2[0]) str7 = "they {country}".format(country = lst2) str7 = "I Regret {country[1]}".format(country = lst2)# 参数可为列表具体的元素 print(lst2) print(str6) print(type(str6)) print(str7) print(type(str7)) print(len(str7))
效果如下:
*****完美分割线3****** ['China', 'American', 'Russia', 'European Union'] {}{}{} ['China', 'American', 'Russia', 'European Union']['China', 'American', 'Russia', 'European Union']['China', 'American', 'Russia', 'European Union'] <class 'str'> *****完美分割线4****** ['China', 'American', 'Russia', 'European Union'] I LOVE China <class 'str'> I Regret American <class 'str'> 17
格式说明符 :跟在冒号后面的表达式,格式说明符 让我们能够详细的指定最终的格式,包含 格式类型(如 字符串 浮点数 或者十六进制),字段宽度和数的精度. 以及各种对齐方式 填充方式 或者如何显示百分位和千分位。
完成替换字段名后,可以设置参数的格式,首先我们尝试使用一个转换标志! 感叹号和r s a的使用,看下效果
str8 = "{i!r} , {i!s} , {i!a}".format(i = "π")# 转换标志 ! 感叹号 print(str8) str9 = "{0} , {0} , {0}".format( "π") # 无转换标志符 print(str9) str9 = "{0} , {0} , {0}".format( "π") # 无转换标志符 print(str9) str10 = "this number is {pi:f}".format(pi = 3.14) # 无转换标志符,f默认6位小数 print(str10)
效果如下:
'π' , π , '\u03c0' π , π , π π , π , π this number is 3.140000
宽度/精度/千位分隔符
# 符号对齐 与用字符填充
#通常为了打印整齐的表格,对于负数符号,需要采用对齐,此处包含以下方式
#在指定的宽度/精度前面加上一个标志 0(填充0),加好+ (填充加好) 减号(填充-) 或者空格( ).str18 = "{:010.2f}".format(3.1415926) # 冒号后第一位0,表示填充0 print(str18) str18 = "{:+10.2f}".format(3.1415926) # 冒号后第一位+,表示填充1个加 print(str18) str18 = "{:-10.2f}".format(3.1415926) # 冒号后第一位-,未填充上 print(str18) print("*****完美分割线12******\n") str18 = "{:<010.2f}".format(3.1415926) # 冒号后第一位<,表示左对齐 print(str18) str18 = "{:>+10.2f}".format(3.1415926) # 冒号后第一位<,表示右对齐 print(str18) str18 = "{:^-10.2f}".format(3.1415926) # 冒号后第一位^,表示居中 print(str18) print("*****完美分割线13******\n") str18 = "{:#<010.2f}".format(3.1415926) # 冒号后第一位#,表示左对齐,其他补充# print(str18) str18 = "{:#>+10.2f}".format(3.1415926) # 冒号后第一位#,表示右对齐,其他补充# print(str18) str18 = "{:#^-10.2f}".format(3.1415926) # 冒号后第一位#,表示居中,其他补充# print(str18) str18 = "{:=10.2f}".format(-3.1415926) # 冒号后第一位=,符号位与参数之间 填充 空格 print(str18) str18 = "{:#=10.2f}".format(-3.1415926) # 冒号后第一位#=,符号位与参数之间 填充 # print(str18) str18 = "{:$=10.2f}".format(-3.1415926) # 冒号后第一位$=,符号位与参数之间 填充 $ print(str18) print("*****完美分割线14******\n") str18 = "{:-.2}".format(3.1415926) # 冒号后第一位 无,显示2位,对齐 print(str18) print(len(str18)) str18 = "{:.2}".format(3.1415926) # 冒号后第一位 无 print(str18) print(len(str18)) str18 = "{: .2}".format(3.1415926) # 冒号后第一位 空格,以便与下面对齐 print(str18) print(len(str18)) str18 = "{:+.2}".format(3.1415926) # 冒号后第一位 加号 ,以便与下面对齐 print(str18) print(len(str18)) str18 = "{:.2}".format(-3.1415926) # 冒号后第一位无,参数有负值,方便与上文对齐 print(str18) print(len(str18))
效果如下:
0000003.14 +3.14 3.14 *****完美分割线12****** 3.14000000 +3.14 3.14 *****完美分割线13****** 3.14###### #####+3.14 ###3.14### - 3.14 -#####3.14 -$$$$$3.14 *****完美分割线14****** 3.1 3 3.1 3 3.1 4 +3.1 4 -3.1 4
3.字符串的方法
常见的string 模块中的常量方法
import string print(string.digits) # 打印 0-9 字符串 print(string.ascii_letters) # 打印 所有大小写字母 print(string.ascii_lowercase) # 打印 小学字母 print(string.printable) # 打印 所有可打印的 ascii字符 print(string.punctuation) # 打印 所有可打印的 ascii标点字符 print(string.ascii_uppercase) #打印所有 大写字母
center
find
join
lower
replace
split
strip
translate
print("*****完美分割线21******\n") tuple1 = str.maketrans("cs", "kz") # translare 方法启用前,需要创建一个对换表,类似于获取 unicode码 print(tuple1) str29 = "this is an incredible test" print(str29.translate(tuple1)) tuple1 = str.maketrans("cs", "kz", " ") # translare 方法 可在后方添加替换其他字符,比如空格 str29 = "this is an incredible test" print(str29.translate(tuple1)) print("*****完美分割线21******\n") import string str30 = "this is an incredible test" str31 = str30.isalnum() # Python isalnum() 方法检测字符串是否由字母和数字组成 print(str31) str31 = str30.isalpha() # Python isalpha() 方法检测字符串是否只由字母组成 print(str31) str31 = str30.isdecimal() # Python isdecimal() 方法检查字符串是否只包含十进制字符 print(str31) str31 = str30.isdigit() # Python isdigit() 方法检测字符串是否只由数字组成 print(str31) str31 = str30.isidentifier() #isidentifier 是否满足标识符定义规则 标识符定义规则为:只能是字母或下划线开头、不能包含除数字、字母和下划线以外的任意字符。 print(str31) str31 = str30.islower() #islower) 方法检测字符串中所有的字母是否都为小写 print(str31) str31 = str30.isnumeric() #isnumeric() 方法检测字符串是否只由数字组成 print(str31) str31 = str30.isprintable() # isprintable() 判断是否为可打印字符串,例如制表符、换行符就不是可打印字符,但空格是 print(str31) str31 = str30.isspace() # isspace() 方法检测字符串是否只由空白字符组成 print(str31) str31 = str30.isupper() # isupper() 方法检测字符串中所有的字母是否都为大写 print(str31) str31 = str30.istitle() # istitle() 检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写 print(str31)
效果如下:
China, Spain to enhance partnership,Spain ****China, Spain to enhance partnership,Spain***** *****完美分割线15****** 7 7 36 36 *****完美分割线16****** 1+2+3+4+5 12345 *****完美分割线17****** china, spain to enhance partnership,spain China, Spain To Enhance Partnership,Spain China, Spain To Enhance Partnership,spain *****完美分割线18****** China, Spain both enhance to partnership,Spain *****完美分割线19****** ['China, Spain to enhance partnership,Spain'] ['1', '2', '3', '4', '5'] *****完美分割线20****** ***China, Spain to *** enhance partnership,Spain!!!! ***China, Spain to *** enhance partnership,Spain!!!! China, Spain to *** enhance partnership,Spain *****完美分割线21****** {115: 122, 99: 107} thiz iz an inkredible tezt thizizaninkredibletezt *****完美分割线21****** False False False False False True False True False False False