![Python自动化开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/781/26846781/b_26846781.jpg)
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种数据类型进行相互转换,具体通过代码的形式加以说明:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0279.jpg?sign=1739291301-NFpiHLdWefmI25sEwRtz6561MRAfqZVt-0-e446fdce8342453a8be24aa8ac617d2f)
上述代码中,整型、浮点型和布尔型是可以相互转换的,而复数就只能转换为布尔型,不支持整型和浮点型的转换。代码的输出结果如图3-1所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0278.jpg?sign=1739291301-WUPj4CbVCQHeTfLEAgA3KoWlItTWuH70-0-7b8a5cf24a8dd89040df95893a7707a7)
图3-1 数据类型的转换结果
3.2 字符串的定义及使用
3.2.1 字符串的定义
字符串(String)是由数字、字母、下划线组成的一串字符,它是编程语言中表示文本的数据类型,主要用于编程、概念说明和函数解释等。字符串在存储上类似字符数组,所以每一位的单个元素都可以提取。
Python的字符串可以用单引号、双引号或三引号来表示。如果字符串中含有单引号,可以使用双引号或三引号来表示字符串;如果字符串中含有双引号,可以使用单引号或三引号表示字符串;如果字符串中含有单引号和双引号,可以使用转义字符或三引号表示字符串。我们通过代码的形式加以说明,代码如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0280.jpg?sign=1739291301-Doo9pPw8SoKzAZ0vFWqK9BqiqP3PVap7-0-a6b6832f201ff7d422a618281028cf4b)
转义字符是一种特殊的字符常量,它是以反斜线"\"开头,后面跟一个或几个字符。转义字符具有特定的含义,用于区别字符原有的意义,故称转义字符。Python常用的转义字符如表3-1所示。
表3-1 Python转义字符
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0386.jpg?sign=1739291301-Z3TmvvDAodkfzyE0k88GtQFP492YuGLr-0-fd3e21cb193bd8fa6383785415d5a057)
现在,我们对字符串的定义已有一定的了解,接下来学习字符串的操作。字符串操作需要依赖特定的函数方法才能实现,常用的字符串操作有截取、替换、查找、分割和拼接。
3.2.2 字符串截取
截取格式为:
字符串[开始位置:结束位置:间隔位置]
开始位置是0,正数代表从左边位置开始,负数代表从右边位置开始,默认代表从0开始。结束位置是被截取的字符串位置,空值默认取到字符串尾部。间隔位置默认为1,截取的内容不做处理;如果设置为2,就将截取的内容再隔一取数。
示例如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0281.jpg?sign=1739291301-MVapnTKAf8YnoQFf3R8Xj9A2AoEeMDv2-0-cd03d798a0a6ff27316c457b8689993b)
3.2.3 字符串替换
替换方法为:
字符串.replace('被替换内容', '替换后内容')
要注意的是,使用replace替换字符串后仅为临时变量,需重新赋值才能保存。
示例如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0282.jpg?sign=1739291301-WTavbQQBJVGtDOUuDsMIJ9lSUgvamN1q-0-3e36ed08707342df10da03f7d77abf4c)
3.2.4 字符串查找元素
查找方法为:
字符串.find('要查找的内容' [, 开始位置,结束位置])
开始位置和结束位置表示要查找的范围,若为空值,则表示查找所有。找到目标后会返回目标第一位内容所在的位置,位置从0开始算,如果没找到,就返回-1。
示例如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0283.jpg?sign=1739291301-UQ4dT1u4ravhAwD25mk1QfY6TIw6byfN-0-bf60b2adea7dc219d6ba109a71b17bd2)
除了使用find函数查找字符串中某个内容,使用index函数也能实现同样的功能。index是在字符串里查找子串第一次出现的位置,类似于字符串的find方法,如果查找不到子串,就会抛出异常,而不是返回-1。
示例如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0284.jpg?sign=1739291301-igegsfZfUF94sZ7ubcRCTywpf7GaMuWT-0-8cda16d18761d1c88447b003cc0b796a)
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章曾经讲过,列表好比人们排队购票,队伍中的每个人就如列表里面的每个元素,元组也是如此。
元组使用小括号来定义,而列表使用中括号来定义。元组列表里面的元素可以是任意的数据类型,每个元素之间使用英文逗号隔开;如果元组和列表中没有元素,说明这是一个空的元组或列表。下面我们在代码中分别定义元组和列表:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0286.jpg?sign=1739291301-OMEw4gH4mI5uh1U9E700lugdqFUcRSu2-0-d4a5521769ef53b1491c4f3e3a14e10e)
从元组和列表的定义来看,两者的元素是一致的,元素的数据类型可以是整型、字符串、布尔型、浮点型、元组和列表。如果元素是一个元组或列表,那么这是一种嵌套模式,这种模式在日常的开发中很常见。值得注意的是,如果定义元组的时候,只有一个元素,则必须在元素后加逗号,否则Python会将小括号视为运算法则的小括号,如(1,)。
定义了元组和列表之后,接下来我们介绍如何对元组列表进行操作处理。元组和列表的读取操作是通过下标索引进行定位读取,下标索引是从0开始,代表是第一个元素。根据上述定义的tuple_1和list_1,具体的读取方法如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0287.jpg?sign=1739291301-zwbGWCSdQhb0QdGjd9YAIoMy8yiXpQc3-0-ffefee16336d9736483fe38a0cff75aa)
下标索引从0开始并以正数方式表示,代表从元组列表的左边开始读取;如果下标索引以负数表示,代表从元组列表的右边开始读取。上述代码运算结果如图3-2所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0285.jpg?sign=1739291301-iq4SBukwy4J1cZX83bxAmBTYPt4Dmjoy-0-98c6765399380f20e07101fab333ffb8)
图3-2 元组列表的读取结果
除了读取某个元素值,还可以读取元组和列表中的连续几个元素,并将其生成一个新的元组或列表。简单理解就是将元组或列表进行切块读取,切块后的数据以原有的数据类型表示,具体实现代码如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0289.jpg?sign=1739291301-LeCbrGFLjnNu7vKXwLjtQ9Bfl0KNDrSv-0-06a79b9a2767a7e97b783e34320c014a)
从上述的代码可以发现,元组列表的切换读取与字符串的截取方法是十分相似的,两者实质都是同一个方法,只不过对象的数据类型有所不同而已。上述代码运算结果如图3-3所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0288.jpg?sign=1739291301-MbgkfExn7Yn2m5ikagHLrHIaAR4jNlxs-0-8e4ac68f3c25767ff947642c715a9a45)
图3-3 元组列表的切块读取结果
除了通过下标索引来读取元组和列表,此外还能通过元素值来找到相应的下标索引、统计元素值的出现次数、判断元素是否存在元组或列表以及获取元组和列表的总长度。这都是一些日常开发中最为常用的方法,实现方法如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0290.jpg?sign=1739291301-m2OB4tJdLsDOLcjdI3X4GQ6cEwBA2Na6-0-8d2333550b28057bb3ad0592d576fe8b)
代码主要对元组或列表使用index函数、count函数、in运算符和len函数即可实现下标索引查找、元素值的出现次数、元素值的存在判断以及元组和列表长度获取。运行结果如图3-4所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0291.jpg?sign=1739291301-pSsDWGxpTDWlL061DhNd7SUtZdXuwPA0-0-0995106aacfc0c2bb5034c1b577066e5)
图3-4 元组和列表的常用函数输出结果
上述内容主要讲述元组和列表的读取方式以及常用查询方式,下一步是对列表进行修改处理。列表的修改方式有修改元素、添加元素和删除元素。具体的修改方式通过以下代码来加以讲述:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0292.jpg?sign=1739291301-f7kaNSNi9iLA1PGFAUihLYmQj6u2oZHS-0-064cd0d40011e55dddb95851e56fa3ef)
上述代码分别对列表进行修改、新增和删除操作。列表修改只需对某个元素值重新赋值即可;添加元素主要有4种实现方式:append函数、extend函数、insert函数和列表相加;删除元素有三种删除方式:remove函数、pop函数和del函数。运行结果如图3-5所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0293.jpg?sign=1739291301-nmV6WMIXrNrqgxl881TYyQP26Yjvchg3-0-a116d7eadd97ee6e8dc10a0627be1ca7)
图3-5 列表增删改操作结果
3.4 集合与字典
集合和字典在某个程度上是非常相似的,两者都是以大括号来进行定义,并且元素是无序排列的。唯一区别在于元素格式和数据类型有所不同,集合的元素只支持数字、字符串和元组,这都是Python不可变的数据类型,而字典则支持Python全部的数据类型。我们以代码的形式来描述集合和字典:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0294.jpg?sign=1739291301-B7AKjM7WP2urrlZCrdtNggAT0oi4nySp-0-c6283572c5f7045412c98e43f57aad2f)
对集合与字典的定义进行分析,集合的元素只有数字、字符串和元组,如果集合元素为元组,并且元组里面嵌套列表,程序也会提示错误信息。字典的元素是以key:value的形式表示,key和value可以是任意的数据类型,每个key是唯一的,不能重复,而value则没有限制。
在实际开发中,集合的使用频率相对较小,其主要原因是元素无序排列以及数据类型的限制要求等多方面因素,这些因素不利于集合的读取和操作。而字典是经常使用的数据类型之一,并且与JSON的结构非常相似,本节将会深入讲述字典的使用方法。
字典的使用也就是对字典进行增删改查,这里通过代码的形式说明字典具体的操作方式,代码如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0295.jpg?sign=1739291301-OFRJs81R8jraZcbb6fOUQeeuvwyqDIPQ-0-e3eae830b206be450551f4947694527d)
上述代码实现了字典的增删改查操作,实现方式与列表的大致相同。在PyCharm中运行代码并查看运行结果,如图3-6所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0296.jpg?sign=1739291301-tMyGjY88qdLY2SxUCc6N0DnAvOHOq4nX-0-d3d3141754e77f3e6e71ccd0970d3c56)
图3-6 字典的增删改查输出结果
如果字典中嵌套了多个字典或列表,可以从字典最外层往内层逐步定位,定位方式是由字典元素的key实现,通过这样的定位我们能够获取目标元素。这里以代码的方式加以说明,代码如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0297.jpg?sign=1739291301-ECBhxQs5PNMgACSkn6K8lq6bU3BzCbjN-0-d5abcb4e639f74cc4374e180f8e05e42)
除此之外,Python的字典还内置了多种函数与方法,具体说明如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0298.jpg?sign=1739291301-hQqZX4qhvqV06lPGcfBHnZcd1U9GcItK-0-ee9b83c123e0a246dbe62207b7e99057)
3.5 数据类型的转化
数据转换是每种编程语言的一个基本操作,但不同的编程语言有不同的转换规则。在Python中,不同的数据类型都能相互转换,其中最常见的是字符串、列表和字典的相互转换。
3.5.1 字符串和列表的转换
将字符串转换成列表,可以由字符串函数split实现,而列表转换字符串可以使用join函数实现。下面我们通过代码示例进行讲述:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0299.jpg?sign=1739291301-bCIcFh7zAOXq46VUIkVmc4rIV9pz3t3C-0-6ef4196bee1267e1894ae75f3e17aae7)
通过上述字符串和列表的相互转换,可以发现字符串是根据字符串里面的空格进行分段截取,使其生成多个子字符串,然后将多个子字符串组合成一个列表;而列表转换字符串是将列表的每个元素以空格进行拼接,使其生成相应的字符串。除此之外,对于一些特殊的字符串或列表可以使用其他方法转换,请看如下示例:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0300.jpg?sign=1739291301-a3UImTrRH9MJCqYI8MKYDidarTYqwLXF-0-cc4f11739e35d3abbe4679e7d6088460)
上述代码主要讲述函数eval、str和list的使用,这些函数需要符合一定的转换要求才能使用,在使用这些函数之前,需要清楚转换要求以及转换后的数据格式。上述代码的运行结果如图3-7所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0301.jpg?sign=1739291301-mOzW0GyUQ70eaKkhQ35Fo7W2CCLb13Qk-0-eb02cf97510988414cf5f9415331aedb)
图3-7 字符串与列表的转换结果
3.5.2 字符串与字典的转换
讲述了字符串与列表的相互转换后,接下来讲述字符串与字典的相互转换。由于字典是以键值对的形式表示,而字符串是以文本的形式表示,两者的表现形式存在较大的差异,因此在相互转换上会有一定的限制。字符串转换为字典可以通过dict函数实现,而字典转换为字符串可通过values()函数来获取字典的所有值,然后将其转换成字符串,具体示例如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0302.jpg?sign=1739291301-nap219MB7jfH0sExSIg1heXtKuUlWMsr-0-df284b4cdd75c7838d1ccc6ca4604922)
当字符串转换为字典时,dict函数需要以key=value的形式作为函数参数,该参数表示字典里的一个键值对;当字典转换为字符串时,由values()函数获取字典的所有值并以列表的形式表示,再将列表转化成字符串,从而实现字典转换为字符串。此外,还可以将特殊字符串转换字典,代码示例如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0305.jpg?sign=1739291301-BiNTptwPsuBVyVJC6O5nKdR1mun0nNvK-0-8ba0cdb1f5ed7250ef83bc03400fff6b)
如果字符串的内容与字典的数据格式非常相似,可以使用上述三种方法将字符串转换成字典。三者的输出结果都是相同的,如图3-8所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0304.jpg?sign=1739291301-gGolkK2wzusWpVDgBQNy91QvNisj4new-0-30c675f512064e034ffb49dff4c2154e)
图3-8 字符串转换或字典
3.5.3 列表与字典的转换
本节我们讲述列表与字典的相互转换。列表转换成字典可以使用dict函数实现,但列表的元素必须以一个列表或元组表示,以列表或元组的形式代表字典的键值对;字典转换成列表有三种方式,分别由values()、keys()和items()函数实现。具体代码示例如下:
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0307.jpg?sign=1739291301-2yv7mMadeQkDseXwOB545gIhtXm7ebLh-0-a12fcb3e9195cf7af4716ca04c0a6feb)
当列表转换成字典时,列表list_1和list_2将会作为字典的键值对,在dict函数中,列表list_1和list_2作为一个新列表的元素,这样就能实现列表转换成字典;当执行字典转换为列表时,函数values()、keys()和items()会生成一个非列表对象,因此还需要对其使用list函数转换成列表。运行结果如图3-9所示。
![](https://epubservercos.yuewen.com/172986/15289821504504606/epubprivate/OEBPS/Images/aa0306.jpg?sign=1739291301-CPjtKbcuYkptSk9vMVKR64JEXC6KjUM4-0-99b002c2f719a05098430be3eac81b18)
图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全部的数据类型。
数据类型的相互转换主要讲述了字符串与列表、字符串与字典、列表与字典的相互转换,不同的数据类型有不同的转换规则,转换规则是多变的,可以根据实际情况选择合适的转换方法。