机器学习入门:Python语言实现
上QQ阅读APP看书,第一时间看更新

1.3 Python中的简单数据类型

Python支持原始数据类型,例如数字(整数、浮点数和指数)、字符串和日期等。Python还支持更复杂的数据类型,例如列表(或数组)、元组和字典,所有这些都将在第3章中讨论。接下来的几节将讨论一些Python基本数据类型,并通过相关的代码示例说明如何对这些数据类型执行不同的操作。

1.3.1 数字

与其他编程语言类似,Python提供了简洁明了的算术操作。以下是关于整数算术操作的例子:

018-02

下面的例子将数字分配给两个变量并计算其乘积:

018-03

下面的例子是关于整数的算术操作:

018-04

注意,两个整数的除法(“/”)实际上是“截断”,即仅保留整数结果。下面的例子将浮点数转换为指数形式:

019-01

int()函数和float()函数可将字符串转换为数字:

019-02

其输出如下:

019-03

另外,还可以使用eval()函数:

019-04

如果要转换非有效整数或浮点数的字符串,Python会引发异常,因此建议将代码放在try/except块中(本章稍后讨论)。

1. 使用其他底数

Python中的数字以10为底数(默认),但你也可以将数字转换为其他底数。例如,下面的代码块将变量x的初始值设为1234,然后分别以2、8和16为底数表示:

019-05

如果要隐藏0b0o0x前缀,可以使用format()函数:

019-06

负整数用负号作为标识:

019-07

2. chr()函数

Python的chr()函数用一个正整数作为形参,并将其转换为对应的字母值(如果存在)。字母A到Z的十进制表示形式为6591(对应于十六进制的415b),小写字母a到z的十进制表示形式为97122(十六进制为617b)。

下面是使用chr()函数打印大写字母A的示例:

020-01

下面的代码打印一系列整数的ASCII值:

020-02

注意:Python 2使用ASCII字符串,而Python 3使用UTF-8。

你可以用以下代码来表示一定范围内的字符:

020-03

但下面的等效代码更加直观:

020-04

如果要显示小写字母的结果,请将上面的(65,91)更改为以下任意一条语句:

020-05

3. Python中的round()函数

Python的round()函数可以将十进制值舍入到最接近的精度:

020-06

4. 在Python中格式化数字

Python允许在打印十进制数字时指定小数精度的位数,如下所示:

020-07

5. 使用分数

Python支持Fraction()函数(在fractions模块中定义),该函数接受两个整数,分别代表分数的分子和分母(分母必须为非零)。这里显示了几个在Python中定义和使用分数的示例:

021-02

在深入研究适用于字符串的Python代码之前,下一节将简要讨论Unicode和UTF-8两种字符编码。

1.3.2 字符串

1. Unicode和UTF-8

Unicode字符串由介于00x10ffff之间的数字序列组成,其中每个数字代表一组字节。编码是将Unicode字符串转换为字节序列的方式。在各种编码中,通用转换格式(Unicode Transformation Format,UTF)-8格式可能是最常见的,也是许多系统的默认编码。UTF-8中的数字8表示编码使用8位数字,而UTF-16使用16位数字(但是这种编码不太常见)。

ASCII字符集是UTF-8的子集,因此可以将有效的ASCII字符串读取为UTF-8字符串,而无须任何重新编码。此外,Unicode字符串也可以转换为UTF-8字符串。

使用Unicode

Python支持Unicode,这意味着你可以使用不同的语言表示字符。Unicode数据能以与字符串相同的方式被存储和处理。Unicode字符串可以通过添加前缀字母“u”来创建,如下所示:

022-01

通过指定特殊字符的Unicode值,可以在字符串中包含特殊字符。例如,在Unicode字符串中嵌入一个空格(其Unicode值为0x0020):

022-02

清单1.1说明了如何显示日语字符串和中文(普通话)字符串。

清单1.1 Unicode1.py

022-03

清单1.1的输出结果如下:

022-04

本章后面将介绍如何使用内置的Python函数对文本字符串进行“切片”。

2. 处理字符串

Python 2中的字符串是一系列的ASCII编码字节,你可以使用“+”运算符连接两个字符串。下面的代码示例说明了如何打印一个字符串,然后连接两个单字母字符串:

022-05

你可以使用“+”或“*”来连接相同的字符串,如下所示:

023-01

可以把字符串赋值给变量,并用print命令打印:

023-02

也可以“解压缩”字符串当中的字母,并赋值给变量,如下所示:

023-03

上述代码片段展示了提取文本字符串中的字母是非常简单的。第3章将介绍如何“解压缩”其他Python数据结构。

还可以从字符串中提取子字符串,如下所示:

023-04

但如果你试图将两个字符串“相减”,则会报错:

023-05

Python中的try/except结构(本章后面会讨论)可以更优雅地处理上述异常情况。

(1)字符串的比较

lower()upper()方法可以将字符串分别转换为小写和大写,如下所示:

024-01

lower()upper()方法在比较两个不区分大小写的ASCII字符串时很有用。清单1.2说明了如何用lower()函数比较两个ASCII字符串。

清单1.2 Compare.py

024-02

由于x包含大小写混合的字母,y包含小写字母,因此清单1.2的输出结果为:

024-03

(2)在Python中格式化字符串

Python提供了string.lstring()string.rstring()string.center()函数来处理文本字符串的位置,其功能分别为左对齐、右对齐和居中。如前面所述,Python还提供了用于高级插入功能的format()方法。

在Python解释器中输入以下命令:

024-04

得到如下输出结果:

024-05

Python中的未初始化变量和None值

Python区分未初始化变量和None值。前者是尚未分配值的变量,而None值则表示“没有值”。集合和方法通常会返回None值,你可以在条件逻辑中检测None值(见第2章)。

下面将说明如何使用内置的Python函数对文本字符串进行“切片”。

(3)字符串的切片

Python支持用数组表示提取字符串的子字符串(即“切片”)。切片的句法为start:stop:step,其中startstopstep值都是整数,分别用于指定开始值、结束值和步长。有趣的是,切片的步长可设为-1,表示从字符串的右侧进行操作,而非左侧。

字符串切片的一些示例如下:

025-01

上述代码的输出结果为:

025-02

后面将介绍如何在一个字符串中插入另一个字符串。

(4)数字和字母字符的检查

Python可以检查字符串中的每个字符,然后判断其是否为真正的数字或字母字符。

清单1.3的CharTypes.py说明了如何确定字符串是否包含数字或字符。如果你尚不熟悉其中的“if”条件语句,请参阅第2章的详细内容。

清单1.3 CharTypes.py

025-03

清单1.3首先对一些变量进行了初始化,然后在2个条件判断中使用isdigit()函数检查str1str2是否为数字,之后使用isalpha()函数检查str3str4str5是否为字母字符串。清单1.3的输出结果如下:

026-01

(5)在其他字符串中搜索和替换一个字符串

Python提供了在文本字符串中搜索和替换一个字符串的方法。清单1.4的FindPos1.py说明了如何使用find函数搜索一个字符串中是否存在另一个字符串。

清单1.4 FindPos1.py

026-02

清单1.4先对变量item1item2text进行初始化,然后在字符串text中搜索item1item2的内容索引。Python中的find()函数返回第一次成功匹配的位置,如果匹配失败,则find()函数返回-1。

清单1.4的输出结果如下:

026-03

除了使用find()方法,还可以使用in运算符检查某元素是否存在,如下所示:

026-04

清单1.5的Replace1.py说明了如何用一个字符串替换另一个字符串。

清单1.5 Replace1.py

026-05

清单1.5首先初始化文本变量,然后打印内容,之后则将字符串文本中出现的“is a”替换为“was a”,再打印修改后的字符串。清单1.5的输出结果如下:

026-06

(6)删除开头和结尾字符

Python提供了函数strip()lstrip()rstrip()来删除文本字符串中的字符。清单1.6的Remove1.py说明了如何搜索字符串。

清单1.6 Remove1.py

027-01

清单1.6首先将字母x和文本变量的内容连接起来,然后打印结果。第三行和第四行代码删除了字符串文本中的前导空格,然后把结果追加到字母x后面。第五行和第六行代码删除了字符串文本中的结尾空格(注意,前导空格已被删除),然后将结果追加到字母x后面。

清单1.6的输出结果如下:

027-02

如果要删除文本字符串内的多余空格,请使用前面介绍的replace()函数。下面的示例说明了如何实现这个操作,其中的re模块将在附录A介绍:

027-03

上述代码的输出结果如下:

027-04

第2章将介绍如何使用join()函数来删除文本字符串中的多余空格。

3. 打印不带换行符的文本

如果想在多条print语句的输出对象之间消除空格和换行符,则可以使用连接或write()函数。

第一种方法是在打印结果之前使用str()函数连接每个字符串对象。例如,在Python中运行以下语句:

027-05

它的输出如下:

027-06

上面一行即为数字9和255(为十六进制数字0xff的十进制值)以及-3.1的连接。

这里顺便提示,str()函数可以与模块和用户定义的类一起使用。下面的例子涉及Python内置模块sys

028-01

以下代码片段说明了如何使用write()函数显示字符串:

028-02

4. 文本对齐

Python提供了对齐文本的方法ljust()rjust()center()ljust()rjust()函数分别使文本字符串左对齐和右对齐,center()函数使字符串居中。下面的代码示例说明了相关功能:

028-03

Python的format()函数可用于对齐文本。使用字符<、>或^,以及所需的宽度数值,可以分别实现文本左对齐、右对齐和居中。以下示例说明了如何指定文本对齐方式:

028-04

1.3.3 处理日期

Python提供一系列与日期相关的函数,详细介绍可访问下列网址:

https://docs.python.org/3/library/datetime.html

清单1.7的Datetime2.py脚本,显示了各种与日期相关的值,例如,当前日期和时间、星期、月、年,以及自本纪元(epoch)以来的时间(以秒为单位)。

清单1.7 Datetime2.py

029-01

清单1.8是运行清单1.7的代码生成的输出结果。

清单1.8 datetime2.out

029-02

Python还可以使用与日期相关的值执行算术计算,如下列代码所示:

029-03

字符串转换为日期

清单1.9的String2Date.py说明了如何将字符串转换为日期,以及如何计算两个日期之间的差。

清单1.9 String2Date.py

030-01

清单1.9的输出如下所示:

030-02