1.字符串的表示
1.1 单行字符串
单行字符串可以用一对单引号(或双引号)来表示。如:
str="这是单行字符串"
1.2多行字符串
多行字符串可以用一对三单引号(或三双引号)来表示。如:
str='''这是多行字符串的第一行 这是多行字符串的第二行 这是多行字符串的第三行 这是多行字符串的第四行 这是多行字符串的第五行'''
单行字符串中,使用单引号时,串内的双引号可作为字符串的一部分,反之亦然。
str1="他说:'明天会下雨'" str2='他说:"明天不下雨'
1.3字符串中的转义字符
在Python中用反斜杠\
来表示转义字符,即该字符与后面相邻的一个字符共同组成了新的含义。如:\\
表示反斜杠、\n
表示换行、\"
表示单引号、\'
表示单引号。
\"
和\'
使用场景:字符串中既出现单引号又出现双引号。
示例
str="他说:\"明天会\'下雨\' \"" print(str) #他说:"明天会'下雨' "
反斜杠还有一个作用:续行
str="这是在演示续行符\ 后面接着上一行" print(str) #这是在演示续行符后面接着上一行
2.字符串的基本格式化
Python语言推荐使用format()
格式化方法,可以将字符串中的槽用format()
函数指定的参数替换,其格式如下:
$$
<模板字符串>.format(<逗号分隔的参数>)
$$
其中模板字符串是一个由字符串和槽(用一对大括号{}
表示)组成的字符串,用来控制字符串和变量的显示效果。例如:
str="{}曰:\"学而时习之,不亦说乎\"".format("孔子") print(str) #孔子曰:"学而时习之,不亦说乎"
模板字符串中可以有多个槽,如果有多个槽且槽内没有指定序号,则按照槽出现的顺序分别对应format()
函数中的不同参数。例如:
str="{}曰:\"学而时习之,不亦{}\"".format("孔子","说乎") print(str) #孔子曰:"学而时习之,不亦说乎" #如果format函数中参数不按照顺序写,如: str="{}曰:\"学而时习之,不亦{}\"".format("说乎","孔子") print(str) #说乎曰:"学而时习之,不亦孔子"
前者中,第一个槽“{}”对应format函数参数中的“孔子”,第二个槽则对应“说乎”。
后者中,将“孔子”和“说乎”的位置调换后输出出现差错。
想要避免这种问题,可以使用接下来讲到的在槽内添加序号,来保证槽与参数一一对应。
可以通过format()
函数参数的序号给模板字符串中指定的槽使用,参数从0开始编号。示例如下:
str="{0}曰:\"学而时习之,不亦{1}\"".format("孔子","说乎") print(str) #孔子曰:"学而时习之,不亦说乎"
在该例子中,给字符串中第一个槽的大括号内添加序号,使得第一个槽与
format()
函数的第一个参数所对应,现在可以解决上面例子中的问题了:#如果format函数中参数不按照顺序写,如: str="{1}曰:\"学而时习之,不亦{0}\"".format("说乎","孔子") print(str) #孔子曰:"学而时习之,不亦说乎"现在由于在字符串的第一个槽中添加了序号“1”,让
format()
函数的第一个参数与第二个槽所对应而第二个参数与第一个槽所对应,即用第一个参数去替换槽。
如果模板字符串中出现槽的数量和format()
方法中参数的数量不一致,即程序不能通过简单的顺序对应确定参数的使用,则必须在槽中使用序号指定参数的对应关系,否则会产生IndexError错误。例如:
str="{}曰:\"学而时习之,不亦{}\"".format("孔子") print(str)
如果希望在模板字符串中直接输出大括号,使用{{
表示{
,}}
表示}
。示例如下:
str="孔子曰:{{学而时习之,不亦说乎}}".format() print(str) #孔子曰:{学而时习之,不亦说乎} str="孔子曰:{{学而时习之,不亦{0}}}".format("说乎") print(str) #孔子曰:{学而时习之,不亦说乎}
3.字符串的格式控制
format()
方法的槽中除了可以放参数序号之外还可以包括格式控制信息。语法格式如下:
$$
{<参数序号>:<格式控制标记>}
$$
其中,格式控制标记用来控制参数显示时的格式,格式内容为:
格式控制标记 | 作用 |
---|---|
: | 引导符号 |
<单个字符> | 用于填充的单个字符 |
<对齐> | <(左对齐)、>(右对齐)、^(居中) |
<宽度> | 设定槽的宽度,即用多长的字符串去替换槽 |
<,> | 数字的千位分隔符,适用于整数和浮点数 |
<.精度> | 浮点数小数部分的精度或字符串的最大输出长度 |
<类型> | 整数类型b、c、d、o、x,浮点数类型e、E、f,% |
如果在使用时同时使用到了其中的多个控制标记,则须按照上述表格从上往下的顺序依次写对应的格式控制标记,如:表示对齐的字符必须写在用于填充的字符右面。
这六个格式控制标记可以分为两组:
-
第一组是:<填充><对齐><宽度>,它们是相关字段,主要用于显示格式的规范。
-
<宽度>:指定槽的宽度,即用于替换槽的字符串的长度,在这里注意不要与最终输出的字符串的长度混淆,例如对于有格式控制的字符串:
"He{0:10}lo".format("l")
,这里的10表示该槽最终被长度为10的字符串所替换,但是此时参数字符串”l“的长度为1,远远小于10,则需要给参数串”l“右面(默认为右面)补充9个空格,此时参数字符串为l_________
(由于书写困难,此处用9个下划线代表空格),而最终输出的字符串则为:Hel lo
。示例如下:str=("l") print("He{0:25}lo".format(str)) #Hel lo
如果指定宽度小于参数字符串的宽度,则按参数字符串原样输出。如:
str=("llll") print("He{0:2}lo".format(str)) #Helllllo
-
<对齐>:当所指定槽的宽度大于参数字符串的长度时,最终输出的字符串中会含有空格(以便于槽的宽度与所指定的匹配),此时参数字符串默认左对齐
str="等级考试" print("{0:25}".format(str))
其中,冒号为引导符,冒号前面的数字0代表该槽与
format()
函数的第一个参数(这里只有一个参数,因此下标为0)对应,而冒号后面的25则表示该槽的长度为25,此时输出为:蓝色部分为所补的空白字符串,参数字符串默认左对齐。
如果使用
>
则表示右对齐,示例如下:str="等级考试" print("{0:>25}".format(str)) # 等级考试
“等级考试左边为21个空格,加上等级考试的长度4刚好为25”,此时为右对齐。
使用
^
则表示居中对齐。示例如下:str="等级考试" print("{0:^25}".format(str))
此时“等级考试”左右两边空格数相等,加起来也是21个。
表示对其的字符必须写在表示槽宽度的数字前面,否则会报错,例如下面的写法都是错误的:
str="等级考试" print("{0:25^}".format(str))
str="等级考试" print("{0^:25}".format(str))
-
<填充>:上面的例子中,我们指定槽的宽度大于了参数字符串的长度,导致输出是参数字符串必须补充空格才能保证输出宽度与设定的一致,而这里的填充就是将上面的空格可以换成我们所想使用的其他字符,如’*‘等等,示例如下:
str="等级考试" print("{0:*^25}".format(str)) #**********等级考试*********** str="等级考试" print("{0:-^25}".format(str)) #----------等级考试-----------
注意:这里的填充字符一定要为单一字符,不能写为
print("{0:**^25}".format(str))
此时会报ValueError: Invalid format specifier '--^25' for object of type 'str'此类错误。
-
-
第二组是:<,><.精度><.类型>,它们主要用于对数字本身格式的规范。
-
<,>:逗号控制字符用于显示数字类型的千位分隔符。示例如下:
l=123456789 print("{0:,}".format(l)) #123,456,789
当
format()
函数所传参数为较长的整型数时,可以应逗号控制字符显示数字的千分位分隔符 -
<.精度>:由小数点
.
开头。对于浮点数,精度表述小数输出部分的有效位数,也就是我们常说的保留n位有效数字,其余做四舍五入处理。对于字符串精度表示输出的最大长度,若参数字符串超过次长度则截断。示例如下:-
对浮点数Π做保留5位效数字处理:
pi=3.1415926535897932385 print("{0:.5}".format(pi)) #3.1416
-
对字符串做限定长度
s1="Hello World" print("{0:.5}".format(s1)) s2="Hello World" print("{0:.20}".format(s2))
-
-
<类型>:设定输出的数据类型
-
对于整数:
-
b
:输出整数的二进制形式。a=1934 print("{0:b}".format(a)) #11110001110
-
c
:输出整数的Unicode字符。a=99 print("{0:c}".format(a)) #c
-
d
:以十进制输出整数。a=1999 print("{0:d}".format(a)) #1999
-
o
:以八进制输出整数。a=1999 print("{0:o}".format(a)) #3717
-
x
:以小写的十六进制输出整数。a=1999 print("{0:x}".format(a)) #7cf
-
X
:以大写的十六进制输出整数。a=1999 print("{0:X}".format(a)) #7CF
-
-
对于浮点数:
-
e
:输出浮点数对应的小写字母e的指数形式。pi=3.1415926535897932385 print("{0:e}".format(pi)) #3.141593e+00
-
E
:输出浮点数对应的大写字母e的指数形式。pi=3.1415926535 print("{0:E}".format(pi)) #3.141593E+00
-
f
:输出浮点数的标准浮点形式。pi=3.1415926535 print("{0:f}".format(pi)) #pi=3.141593
-
%
:输出浮点数的百分比形式。pi=3.1415926535 print("{0:%}".format(pi)) #314.159265%
-
-
-
4.字符串类型的操作
4.1字符串操作符
-
+
:x+y,连接两个字符串x与y。示例如下:s1="Hello " s2="World" s=s1+s2; print(s) #Hello World
-
*
:x*n,复制n次字符串x。示例如下:s2="World" s=s2*3; print(s) #WorldWorldWorld
-
in
:x in s,如果x是s的子串,则返回true,否则返回False。示例:s="Hello World" s1="Hello"; s2="Python" print(s1 in s) #True print(s2 in s) #False
4.2字符串处理函数
Python提供了一些对字符串进行处理的内置函数,如表:
函数 | 描述 |
---|---|
len(x) | 返回字符串x的长度,也可以返回其他组合数据类型的元素个数 |
str(x) | 返回任意x所对应的字符串形式 |
chr(x) | 返回Unicode编码x对应的单字符 |
ord(x) | 返回单字符x对应的Unicode编码 |
hex(x) | 返回整数x对应的十六进制数的小写形式字符串 |
oct(x) | 返回整数x对应的八进制数的小写形式字符串 |
示例:
-
返回字符串长度:
s="Hello World" l=len(s) print(l) #11
-
返回整数1234对应的十六进制字符串形式:
s=1234 a=hex(s) print(a) #0x4d2
4.3字符串处理方法
方法 | 描述 |
---|---|
str.lower() | 返回字符串st的副本,全部字符小写 |
str.upper() | 返回字符串str的副本,全部字符大写 |
str.split(sep=None) | 返回一个列表,由str根据sep被分割的部分构成,省略sep默认以空格分隔返回sub 子串出现的次数字符串居中函数,fillchar参数可选 |
str.count(sub) | 返回sub 子串出现的次数 |
str.replace(old,new) | 返回字符串str的副本,所有old子串被替换为new |
str.center(width,fillchar) | 字符串居中函数,fillchar参数可选 |
str.strip(chars) | 从字符串str中去掉在其左侧和右侧chars中列出的字符 |
str.join(iter) | 将iter变量的每一个元素后增加一个st字符串 |
示例:
-
返回字符串st的副本,全部字符小写
str="Hello World" s=str.lower() print(s) #hello world
-
返回字符串str的副本,全部字符大写
str="Hello World" s=str.upper() print(s) #HELLO WORLD
-
返回sub子串出现的次数
str="Hello World" s=str.count("Hello") print(s) #1
-
返回字符串str的副本,所有old子串被替换为new
str="Hello World" s=str.replace("l",'L') print(s) #HeLLo WorLd
-
字符串居中函数,fillchar参数可选
str="Hello World" s=str.center(20,'*') print(s) #****Hello World*****
4.4字符串比较运算
与数值运算一样,字符串也可以进行比较运算,有6中操作符,即>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)、!=(不等于)。两个字符串比较采用从左向右一次比较字符的方式,根据字符对应的Unicode编码值决定字符串的大小关系。示例如下:
print("Hello" > "World") #False print("Hello" < "World") #True print("Hello" > "Herld") #False print("Hello" < "World") #True
5.类型判断和类型之间转换
5.1类型判断
函数:type(x)
返回x的数据类型。注意:返回的值不是字符串,不能采用字符串比较的方式进行判断。
示例:
str="Hello World" print(type(str)) #<class 'str'>
’str‘表示字符串
’int‘表示整数类型
’float‘表示浮点数类型
如果需要在条件判断中使用变量类型作为条件,可以使用type()函数进行直接比较。例如:
str="Hello World" if type(str)==type("Hel") : print("True") else: print("False") #True
5.2数值与字符串之间的转换
数字运算的输出结果类型可能与输人数字的类型不同。例如:两个整数采用运算符“/”的除法将可能输出浮点数结果。此外,通过内置的数字类型转换函数可以显式地在数字类型之间进行转换:
函数 | 描述 |
---|---|
int(x) | 将x转换为整数,x可以是浮点数或字符串 |
float(x) | 将x转换为浮点数,可以是整数或字符串 |
str(x) | 将x转换为字符串,x可以是整数或浮点数 |
-
浮点数转换为整数类型时,小数部分会被(舍弃掉(不使用四舍五人)。
-
整数转换成浮点数类型时,会额外增加小数部分。
示例:
print(int(10.56)) print(float(10)) print(str(10.2)) print(str(10)) print(int("123")) print(float("12.4")) #10 #10.0 #10.2 #10 #123 #12.4
import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import accuracy_score, classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import confusion_matrix import seaborn as sns