
3.1 数字的类型及转换
在第2章,我们已经提及到数字这一数据类型,其主要以阿拉伯数字的形式表示。数字可以细分为整型、浮点型、布尔型和复数,具体说明如下:
(1)整型是没有小数点的数值。
(2)浮点型是带有小数点的数值。
(3)布尔型以True和False表示,实质分别为1和0,为区分整型的1和0,而改为True和False。
(4)复数是由一个实数和一个虚数组合构成,可以用x+yj或者complex(x,y)表示。
现在通过代码的形式表示这4种数据类型,代码如下:
a = 10 b = 5.5 c = False d = 2 + 3j print(type(a), type(b), type(c), type(d)) # 输出结果为:<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
我们可以使用特定的方法将4种数据类型进行相互转换,具体通过代码的形式加以说明:

上述代码中,整型、浮点型和布尔型是可以相互转换的,而复数就只能转换为布尔型,不支持整型和浮点型的转换。代码的输出结果如图3-1所示。

图3-1 数据类型的转换结果
3.2 字符串的定义及使用
3.2.1 字符串的定义
字符串(String)是由数字、字母、下划线组成的一串字符,它是编程语言中表示文本的数据类型,主要用于编程、概念说明和函数解释等。字符串在存储上类似字符数组,所以每一位的单个元素都可以提取。
Python的字符串可以用单引号、双引号或三引号来表示。如果字符串中含有单引号,可以使用双引号或三引号来表示字符串;如果字符串中含有双引号,可以使用单引号或三引号表示字符串;如果字符串中含有单引号和双引号,可以使用转义字符或三引号表示字符串。我们通过代码的形式加以说明,代码如下:

转义字符是一种特殊的字符常量,它是以反斜线"\"开头,后面跟一个或几个字符。转义字符具有特定的含义,用于区别字符原有的意义,故称转义字符。Python常用的转义字符如表3-1所示。
表3-1 Python转义字符

现在,我们对字符串的定义已有一定的了解,接下来学习字符串的操作。字符串操作需要依赖特定的函数方法才能实现,常用的字符串操作有截取、替换、查找、分割和拼接。
3.2.2 字符串截取
截取格式为:
字符串[开始位置:结束位置:间隔位置]
开始位置是0,正数代表从左边位置开始,负数代表从右边位置开始,默认代表从0开始。结束位置是被截取的字符串位置,空值默认取到字符串尾部。间隔位置默认为1,截取的内容不做处理;如果设置为2,就将截取的内容再隔一取数。
示例如下:

3.2.3 字符串替换
替换方法为:
字符串.replace('被替换内容', '替换后内容')
要注意的是,使用replace替换字符串后仅为临时变量,需重新赋值才能保存。
示例如下:

3.2.4 字符串查找元素
查找方法为:
字符串.find('要查找的内容' [, 开始位置,结束位置])
开始位置和结束位置表示要查找的范围,若为空值,则表示查找所有。找到目标后会返回目标第一位内容所在的位置,位置从0开始算,如果没找到,就返回-1。
示例如下:

除了使用find函数查找字符串中某个内容,使用index函数也能实现同样的功能。index是在字符串里查找子串第一次出现的位置,类似于字符串的find方法,如果查找不到子串,就会抛出异常,而不是返回-1。
示例如下:

3.2.5 字符串分割
分割方法为:
字符串.split('分割符',分割次数)
如果存在分割次数,就仅分割成“分割次数+1”个子字符串;如果为空,就默认全部分割。分割后,返回结果以列表表示。
示例如下:
str = 'ABCDABC' # 分割全部 print(str.split('B')) # 输出内容:['A', 'CDA', 'C'] # 分割一次 print(str.split('B', 1)) # 输出内容:['A', 'CDABC']
3.2.6 字符串拼接
字符串拼接有5种实现方式,使用加号拼接、使用逗号拼接、直接拼接、格式化拼接和join方法拼接。具体的拼接方式如下所示:
str = 'Hello Python' print('第一种方式通过加号形式拼接:' + str) print('第二种方式通过逗号形式拼接:' , str) print('第三种方式通过直接拼接形式:''Hello'' Python') print('第四种方式通过格式化形式拼接:' + '%s' %(str)) str_list = ['Hello', 'Python'] str = ' '.join(str_list) print('第五种方式通过join形式拼接:' + str)
3.3 元组与列表
元组和列表是两个非常相似的亲兄弟,两者在表现形式上有所不同,其最大的区别的是元组在定义之后无法修改,只能读取,而列表则支持修改和读取。在第2章曾经讲过,列表好比人们排队购票,队伍中的每个人就如列表里面的每个元素,元组也是如此。
元组使用小括号来定义,而列表使用中括号来定义。元组列表里面的元素可以是任意的数据类型,每个元素之间使用英文逗号隔开;如果元组和列表中没有元素,说明这是一个空的元组或列表。下面我们在代码中分别定义元组和列表:

从元组和列表的定义来看,两者的元素是一致的,元素的数据类型可以是整型、字符串、布尔型、浮点型、元组和列表。如果元素是一个元组或列表,那么这是一种嵌套模式,这种模式在日常的开发中很常见。值得注意的是,如果定义元组的时候,只有一个元素,则必须在元素后加逗号,否则Python会将小括号视为运算法则的小括号,如(1,)。
定义了元组和列表之后,接下来我们介绍如何对元组列表进行操作处理。元组和列表的读取操作是通过下标索引进行定位读取,下标索引是从0开始,代表是第一个元素。根据上述定义的tuple_1和list_1,具体的读取方法如下:

下标索引从0开始并以正数方式表示,代表从元组列表的左边开始读取;如果下标索引以负数表示,代表从元组列表的右边开始读取。上述代码运算结果如图3-2所示。

图3-2 元组列表的读取结果
除了读取某个元素值,还可以读取元组和列表中的连续几个元素,并将其生成一个新的元组或列表。简单理解就是将元组或列表进行切块读取,切块后的数据以原有的数据类型表示,具体实现代码如下:

从上述的代码可以发现,元组列表的切换读取与字符串的截取方法是十分相似的,两者实质都是同一个方法,只不过对象的数据类型有所不同而已。上述代码运算结果如图3-3所示。

图3-3 元组列表的切块读取结果
除了通过下标索引来读取元组和列表,此外还能通过元素值来找到相应的下标索引、统计元素值的出现次数、判断元素是否存在元组或列表以及获取元组和列表的总长度。这都是一些日常开发中最为常用的方法,实现方法如下:

代码主要对元组或列表使用index函数、count函数、in运算符和len函数即可实现下标索引查找、元素值的出现次数、元素值的存在判断以及元组和列表长度获取。运行结果如图3-4所示。

图3-4 元组和列表的常用函数输出结果
上述内容主要讲述元组和列表的读取方式以及常用查询方式,下一步是对列表进行修改处理。列表的修改方式有修改元素、添加元素和删除元素。具体的修改方式通过以下代码来加以讲述:

上述代码分别对列表进行修改、新增和删除操作。列表修改只需对某个元素值重新赋值即可;添加元素主要有4种实现方式:append函数、extend函数、insert函数和列表相加;删除元素有三种删除方式:remove函数、pop函数和del函数。运行结果如图3-5所示。

图3-5 列表增删改操作结果
3.4 集合与字典
集合和字典在某个程度上是非常相似的,两者都是以大括号来进行定义,并且元素是无序排列的。唯一区别在于元素格式和数据类型有所不同,集合的元素只支持数字、字符串和元组,这都是Python不可变的数据类型,而字典则支持Python全部的数据类型。我们以代码的形式来描述集合和字典:

对集合与字典的定义进行分析,集合的元素只有数字、字符串和元组,如果集合元素为元组,并且元组里面嵌套列表,程序也会提示错误信息。字典的元素是以key:value的形式表示,key和value可以是任意的数据类型,每个key是唯一的,不能重复,而value则没有限制。
在实际开发中,集合的使用频率相对较小,其主要原因是元素无序排列以及数据类型的限制要求等多方面因素,这些因素不利于集合的读取和操作。而字典是经常使用的数据类型之一,并且与JSON的结构非常相似,本节将会深入讲述字典的使用方法。
字典的使用也就是对字典进行增删改查,这里通过代码的形式说明字典具体的操作方式,代码如下:

上述代码实现了字典的增删改查操作,实现方式与列表的大致相同。在PyCharm中运行代码并查看运行结果,如图3-6所示。

图3-6 字典的增删改查输出结果
如果字典中嵌套了多个字典或列表,可以从字典最外层往内层逐步定位,定位方式是由字典元素的key实现,通过这样的定位我们能够获取目标元素。这里以代码的方式加以说明,代码如下:

除此之外,Python的字典还内置了多种函数与方法,具体说明如下:

3.5 数据类型的转化
数据转换是每种编程语言的一个基本操作,但不同的编程语言有不同的转换规则。在Python中,不同的数据类型都能相互转换,其中最常见的是字符串、列表和字典的相互转换。
3.5.1 字符串和列表的转换
将字符串转换成列表,可以由字符串函数split实现,而列表转换字符串可以使用join函数实现。下面我们通过代码示例进行讲述:

通过上述字符串和列表的相互转换,可以发现字符串是根据字符串里面的空格进行分段截取,使其生成多个子字符串,然后将多个子字符串组合成一个列表;而列表转换字符串是将列表的每个元素以空格进行拼接,使其生成相应的字符串。除此之外,对于一些特殊的字符串或列表可以使用其他方法转换,请看如下示例:

上述代码主要讲述函数eval、str和list的使用,这些函数需要符合一定的转换要求才能使用,在使用这些函数之前,需要清楚转换要求以及转换后的数据格式。上述代码的运行结果如图3-7所示。

图3-7 字符串与列表的转换结果
3.5.2 字符串与字典的转换
讲述了字符串与列表的相互转换后,接下来讲述字符串与字典的相互转换。由于字典是以键值对的形式表示,而字符串是以文本的形式表示,两者的表现形式存在较大的差异,因此在相互转换上会有一定的限制。字符串转换为字典可以通过dict函数实现,而字典转换为字符串可通过values()函数来获取字典的所有值,然后将其转换成字符串,具体示例如下:

当字符串转换为字典时,dict函数需要以key=value的形式作为函数参数,该参数表示字典里的一个键值对;当字典转换为字符串时,由values()函数获取字典的所有值并以列表的形式表示,再将列表转化成字符串,从而实现字典转换为字符串。此外,还可以将特殊字符串转换字典,代码示例如下:

如果字符串的内容与字典的数据格式非常相似,可以使用上述三种方法将字符串转换成字典。三者的输出结果都是相同的,如图3-8所示。

图3-8 字符串转换或字典
3.5.3 列表与字典的转换
本节我们讲述列表与字典的相互转换。列表转换成字典可以使用dict函数实现,但列表的元素必须以一个列表或元组表示,以列表或元组的形式代表字典的键值对;字典转换成列表有三种方式,分别由values()、keys()和items()函数实现。具体代码示例如下:

当列表转换成字典时,列表list_1和list_2将会作为字典的键值对,在dict函数中,列表list_1和list_2作为一个新列表的元素,这样就能实现列表转换成字典;当执行字典转换为列表时,函数values()、keys()和items()会生成一个非列表对象,因此还需要对其使用list函数转换成列表。运行结果如图3-9所示。

图3-9 列表与字典的转换结果
3.6 本章小结
数据类型是任何一门编程语言的组成部分,学习编程语言必须要学习其数据类型。Python的标准数据类型主要有数字、字符串、列表、元组、集合和字典。按照数据存储的内存地址可变性分为不可变数据和可变数据,可变数据有列表、集合和字典;不可变数据有数字、字符串和元组。
数字可以分为几个类型:整型、浮点型、布尔型和复数,具体说明如下:
(1)整型是没有小数点的数值。
(2)浮点型是带有小数点的数值。
(3)布尔型以True和False表示,实质分别为1和0,为区分整型的1和0,而改为True和False。
(4)复数是由一个实数和一个虚数组合构成,可以用x+yj或者complex(x,y)表示。
字符串(String)是由数字、字母、下划线组成的一串字符,可以用单引号、双引号或三引号来表示。常用的字符串操作有截取、替换、查找、分割和拼接。
(1)字符串截取,截取格式为:字符串[开始位置:结束位置:间隔位置]。
(2)字符串替换,替换方法为:字符串.replace('被替换内容', '替换后内容')。
(3)字符串查找元素,查找方法为:字符串.find('要查找的内容' [, 开始位置,结束位置])。
(4)字符串分割,分割方法为:字符串.split('分割符',分割次数)。
(5)字符串拼接方式:使用加号拼接、使用逗号拼接、直接拼接、格式化拼接和join方法拼接。
元组是使用小括号来定义,而列表是使用中括号来定义。元组列表里面的元素可以是任意的数据类型,每个元素之间使用英文逗号隔开;如果元组和列表中没有元素,说明这是一个空的元组或列表。
元组或列表的元素的数据类型可以是整型、字符串、布尔型、浮点型、元组和列表。如果元素是一个元组或列表,那么这是一种嵌套模式,这种模式在日常的开发中是很常见的。
集合和字典在某个程度上是非常相似的,两者都是以大括号来进行定义,并且元素是无序排列的。唯一区别在于元素格式和数据类型有所不同,集合的元素只支持数字、字符串和元组,这都是Python里面不可变的数据类型,而字典是支持Python全部的数据类型。
数据类型的相互转换主要讲述了字符串与列表、字符串与字典、列表与字典的相互转换,不同的数据类型有不同的转换规则,转换规则是多变的,可以根据实际情况选择合适的转换方法。