![人工智能数据素养](https://wfqqreader-1252317822.image.myqcloud.com/cover/971/49053971/b_49053971.jpg)
第2章 Python数据分析基础
2.1 Python基础
2.1.1 Python简介
如今,计算机已经广泛应用于各行各业。计算机能够执行各种程序,完成各种任务,而各种程序语言都是由程序员设计的。
Python是一种跨平台的计算机程序设计语言,是一种结合了解释性、编译性、互动性和面向对象的高层次的脚本语言。Python的创始人是荷兰的吉多·范罗苏姆(Guido van Rossum)。1989年,在荷兰阿姆斯特丹,Guido为了打发圣诞节,决心开发一个新的脚本解释程序,作为对ABC语言的继承。ABC语言是Guido参与设计的一种教学语言,在他看来,ABC语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有获得成功,究其原因,Guido认为是其非开放性。于是,Guido决心在Python中避免犯同一错误。同时,他还想在Python中实现在ABC语言中闪现过但未曾实现的东西。
就这样,Python在Guido手中诞生了。Python(大蟒蛇)这一编程语言的名字,取自英国20世纪70年代首播的电视喜剧《蒙提·派森的飞行马戏团》(Monty Python's Flying Circus)。目前,Python已经成为广受欢迎的程序设计语言之一。Python清晰划一的设计风格使其成为一门易读、易维护,并且用途广泛的语言。Python的设计哲学是优雅、明确、简单。Python开发者一般会拒绝花哨的语法,而选择明确没有或少有歧义的语法。作为一种解释型脚本语言,Python可以应用于以下领域。
● Web和Internet开发。
● 科学计算和统计。
● 人工智能。
● 桌面界面开发。
● 软件开发。
● 后端开发。
● 网络爬虫。
Python的解释器将Python的源代码翻译成计算机可以识别的机器语言并执行。从官方网站可以免费下载Python,然后安装在Windows、Linux、UNIX、Mac OS X等操作系统中。Python的安装界面如图2-1所示,在Windows系统进行安装时,必须勾选“Add Python 3.7 to PATH”选项。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_32_1.jpg?sign=1738898090-TpHWHvaXCqokqARancRZjW1xFDLpA6dQ-0-0d29662fba6ec7a19fad99d57ed1e415)
图2-1 Python的安装界面
安装路径可以选择默认位置,也可以自定义位置,如图2-2所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_32_2.jpg?sign=1738898090-8m5IxOUEcjw7wUXcNzcqeVTOyKY8mLYt-0-4a527c865473c0e95e1868b316dfd5f9)
图2-2 选择自定义位置安装Python
在安装完毕后,就可以使用集成开发环境来尝试编程了。
集成开发环境(IDE)是专门用于软件开发的程序,其集成了几款专门为软件开发而设计的工具。这些工具通常包括处理代码的编辑器(如语法高亮和自动补全等),构建、执行、调试工具,以及某种形式的源代码控制。
不同的IDE各有特点,但都试图实现一个共同的要求,即快速开发可扩展性和可管理的代码。可以根据需求选择适合自己的IDE。IDLE是Python软件包自带的一个集成开发环境,可以方便地创建、运行、调试Python程序。IDLE是开发Python程序的基本IDE,具备基本的IDE功能,是非商业Python开发的不错选择。在安装好Python后,IDLE也会自动安装。使用IDLE就可以轻松编写出执行Python的程序。
另外,常用的IDE还有PyCharm、Spyder、Eclipse+PyDev、Atom、Jupyter Notebook、Sublime Text等,读者可在今后的学习中再作比较。
下面来编写第一个Python程序。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_1.jpg?sign=1738898090-wOTIdDxDjDK652qTQ3ShOJ914fZSAKxR-0-4409c0a0b376839e4d9a6246ca0a319b)
保存后按键盘上的F5键,屏幕将显示如下结果。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_2.jpg?sign=1738898090-ldsYW9GTaxpCSKvjdodx1YiJ83z4v1sr-0-7e26fcd908b7e19db0d368d5f52798a8)
上面的程序非常简单、易于实现,如果之后需要编写非常复杂的代码,那么程序将变得十分复杂、难以理解,此时要如何编写呢?
使用注释就可以给程序添加解释并补充其他信息,让复杂的地方便于理解。在Python中,可以使用哈希字符(#)将注释添加在语句上方或末尾处。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_3.jpg?sign=1738898090-74H2C7R9FxAIWwy90XEsJyiRoOe1vQmB-0-fd1cb0bdd04b17f61ca745e294c08825)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_1.jpg?sign=1738898090-oCODpkQf0HkZRRnt1IFagNqRhBz4E3ke-0-752d13a43d512e49d16ec2963bdf6a46)
在Python中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进代表了下一个代码块的开始,而缩进的结束则表示此代码块的结束。无论是手动敲击空格键,还是使用Tab键添加空格,在通常情况下都将4个空格长度默认为1个缩进量(在默认情况下,按1次Tab键表示添加4个空格),如上述代码中for语句块的缩进形式。
在Python中,变量是存储在内存中的值,这意味着使用变量就会在内存中占有位置,当程序需要存储数据时就需要用到变量,Python解释器会根据不同的变量类型开辟不同的内存空间存储变量值。在使用变量时,无须提前声明,只需要给变量赋值即可。变量的命名规范如下。
● 变量名可以包含字母、数字、下画线,但是不能以数字开头。
● 变量不能以系统关键字命名。
● 除了下画线,其他符号不能作为变量名称使用。
● 在变量名中要区分字母大小写。
● 在变量名中不允许出现空格字符。
可以通过“=”为变量赋值,不过此处的“=”与其在数学中的含义不同,在Python中,“=”是赋值运算符,其左侧声明了一个内存区域中的变量,右侧可以是数字、字符串、变量或表达式。其语法格式为:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_2.jpg?sign=1738898090-kujNgVEE5LW3EJMnrtvQXlBNDclvuXjg-0-a0c471c48df86c80a7e1fe3b1304baf0)
例如,声明一个数值型变量Shuz。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_3.jpg?sign=1738898090-XlIb9U93qef3nWmZ5yxjVloYe1QpjsOO-0-49ece99e7461b8e02f8c740a19f4424c)
#创建一个变量Shuz,给它赋值为9999
变量的类型可以随时变更,也可以重新为变量Shuz赋值。同时,允许多个变量指向同一个值,如num1=num2=100,此时的变量num1和num2具有相同的内存地址,可以使用Python的内置函数id()返回变量所指的内存地址。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_4.jpg?sign=1738898090-Yy4q1aPIeXESHnEnXA69IxSeQsVKTXEn-0-2117ebb72e7a37b582c2fee827297ba7)
结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_1.jpg?sign=1738898090-O2kGQfNLDBrFGHF27XDFaDsgnBKndF2D-0-0dd461eeb9528b3c2c5b9039ea80e180)
在Python中,最常用的运算符是赋值运算符“=”。此外,Python还提供了复合赋值运算符,如表2-1所示。
表2-1 复合赋值运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_2.jpg?sign=1738898090-UpsrNnh4naOrsRCdOr3kDQLen7H2Ab1j-0-7d6bdc955cc364c846eb4dab16821ccd)
使用方式举例如下。
● a=a+b写为a+=b。
● a=a-b写为a-=b。
● a=a*b写为a*=b。
表2-1剩余的赋值运算符用法与上述3种相同,这种描述方式会使编写出来的代码更为简洁。
2.1.2 Python数据类型
Python的常用数据类型有6种,分别为数字(Number)、字符串(String)、布尔型(Bool)、列表(List)、元组(Tuple)和字典(Dict)。本节暂介绍前3种,即数字、字符串和布尔型。
1.数字
数字数据类型(Number),简称数字,用于存储数值。Python支持以下3种不同的数值类型。
(1)整型(int):通常被称为整数,是整数或负数,不带小数点。
(2)浮点型(float):由整数部分与小数部分组成。
(3)复数(complex):由实数部分和虚数部分组成,可使用a+bj或complex(a,b)来表示,复数的实部a和虚部b都是浮点型。
Python同样支持使用算术运算符,如表2-2所示。
表2-2 算术运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_1.jpg?sign=1738898090-RxOWShusTqZYjdBixjNVpfSArMlB7TU2-0-077365cc7d4b1324f363ca66bd98d015)
算术运算符与数学运算一样,遵循运算的优先顺序,即先幂后乘除,最后加减。若优先级相同,则按照从左到右的顺序执行。另外,在Python运算中,不存在大括号与中括号,只有圆括号(),且圆括号内的运算优先执行。例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_2.jpg?sign=1738898090-cWSzDTP6oy6KfUh78WYmo6b5aaREkq8f-0-d6ebb5df7e8c8fd32d3441004dba9f83)
读者在计算上述列式后如果得出27,说明已经掌握了Python的算术运算符。如果未能得出这一结果,则可先对照下列步骤重新检查自己的运算过程。
● 先计算圆括号内的内容。
● 幂运算。
● 乘除(从左到右)。
● 加减(从左到右)。
2.字符串
字符串(String)是在Python中最常用的数据类型。
双引号("")或单引号('')中的数据就是字符串。字符串可以是字母、符号和数字,也可以是计算机所能够表示的一切字符的集合。单字符在Python中也可作为一个字符串使用。
字符串可以拼接起来形成串联,拼接字符串的常用运算符有2种,如表2-3所示。
表2-3 拼接字符串的常用运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_3.jpg?sign=1738898090-hlmUdADG9MYSUIjA1pUtxJR45IoNZcgi-0-0919f7f42c556c3b7bbed0c22cc34077)
通过以下示例对拼接字符串的运算符进行简要说明。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_4.jpg?sign=1738898090-NYhTX16OcsrjVqDqcE9TL7ZCs8a91oIX-0-5377538f2d6abcdb2a96dce8c69fd70e)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_1.jpg?sign=1738898090-5mOJJqq6dyHoRMOkpd2hGc8YLoAfqeS4-0-38b36aa20d528e718b2ad47a4a132024)
运行代码后,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_2.jpg?sign=1738898090-4zcWLGXebOYx8z5CLcPRbpuNimfB0o74-0-6a7871034bde32c1712d5e67ad13f138)
3.布尔型
布尔数据类型(Bool),简称布尔型,用来表示真或假的值,通常用于条件判断和循环语句。布尔型提供了2个布尔值来表示真(对)或假(错),在Python中分别对应True(真或对)或False(假或错)。True和False是Python的关键字,其中,True对应数值1,False对应数值0(其实任何对象都可以转成布尔型,也可以直接用于条件判断,所有非0数值都可以当作True处理)。
布尔表达式需要先进行判断,然后回答“是”或“否”。Python提供了比较运算符,如表2-4所示。
表2-4 比较运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_3.jpg?sign=1738898090-Whzgm2M2s5Np4Dedid3JFXAZvkq7Yvv9-0-4b14d67327e57ac368643f9f0325c1dc)
这时,请思考以下2个问题。
● a和b,分别赋值为8,此时a等于b吗?
● x和y,分别赋值为1和8,此时x大于等于y吗?
上述2个问题的代码编写如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_4.jpg?sign=1738898090-bvJ9Axr2KRGsDNezD6lEqvh3kZun1txS-0-15c40e27872d8a5f06d5ba8aaddf13c5)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_1.jpg?sign=1738898090-2RdxKYQ4jcewiu99S9II0n2IjpF53wab-0-233c3241d240b148959cd8686ecde841)
计算机在判断后,将给出答案True或False。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_2.jpg?sign=1738898090-9ZZXA25IydmY3cM5U5OpxxzAuiUowIEA-0-3f54dd84e6483dfe06913aee1fb41c5e)
初学者应注意的是,赋值运算符“=”和比较运算符“==”存在本质区别!布尔表达式比较复杂(复合布尔表达式),使用逻辑运算符相连。那么,逻辑运算符又有哪些呢?如表2-5所示。
表2-5 逻辑运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_3.jpg?sign=1738898090-R7pVc1ez0oFvuYXVpvIyv6ck3cANY7rn-0-cab046324529044f19651348a80a3b10)
以下为逻辑运算符的演示代码,读者可以先自行对这3个复合布尔表达式进行判断。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_4.jpg?sign=1738898090-diMp8nTduEA8ro38wxdFvfvohcjIDllb-0-687897ff6c1acb398c323477bc0c13d6)
计算机输出的结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_5.jpg?sign=1738898090-cNellmABzYtavpViXkSJsjiUqRXODxq4-0-0255676718868788362b2cc64a29c13d)
如果自我判断的结果与计算机输出的结果相同,说明已基本掌握了逻辑运算符的相关知识。另外,运算符是有顺序的,其优先级顺序如表2-6所示。
表2-6 运算符的优先级顺序
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_39_1.jpg?sign=1738898090-rRkxvFLBmyH4dLJGfw5Vuq1HEliAdu0K-0-1a0d92cdb944bad5566022e463b9009b)
2.1.3 常用的操作、函数和方法
Python作为一门编程语言,其可读性非常高,初学者在学习后可以调用许多内置的函数和方法,提高工作效率。下面先介绍一些有关数字的常用函数。
● int(x):将x转换为整数。
● float(x):将x转换为浮点数。
● max(x,y,z,…):返回给定参数的最大值。
● min(x,y,z,…):返回给定参数的最小值。
使用函数操作演示如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_39_2.jpg?sign=1738898090-25Lzy9OXAPHmCOucJwd4JV2OYIepguY2-0-7ec5995b5d7cf6b617318ba0ac01da1f)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_1.jpg?sign=1738898090-Bz3GPLMepqgobUInTW9ogVynYcHhNivY-0-c1b89dd5e7269fc3b4cae87d4c39b8a6)
读者可自行编写代码,对比自己的运行结果是否与下方运行结果相同。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_2.jpg?sign=1738898090-WmND9TEfxEr3PuP2xXA5HfYHC193dmX7-0-875c6fdf1bbdb40474b2a83cfa10301b)
接下来介绍求和函数fsum(),此函数不同于前4个函数,使用时需要导入math库。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_3.jpg?sign=1738898090-WZUDm9IT7p9MJFO4zRHibRUDqD9wSsVB-0-a7964fa1144d71f5be1a5a547ae04f0b)
math库是Python提供的内置数学类函数库,不支持复数类型,其中包含了4个数学常数和44个函数。44个函数分为4类,包括16个数值表示函数、8个幂对数函数、16个三角对数函数和4个高等特殊函数。感兴趣的读者可自行深入研究。
介绍完关于数字的常用操作,现在来介绍关于字符串的操作。
字符串是计算机所能够表示的一切字符的集合,字符串中的字符排列遵循一定的顺序,如果改变了字符顺序,就会形成新的字符串。例如,字符串“我是中国人”,如果改成“中国人是我”,就成了新的字符串,而不是原来的了,这是一种有序排列。
Python字符串就是不可改变字符顺序的有序排列,通过索引(index)可以获取其中的数据元素。
● 正向索引:在Python中的字符串,第一个字符所在的位置是0,第二个字符所在的位置是1,以此类推。
● 反向索引:从-1开始,-1代表最后一个,-2代表倒数第二个,以此类推。
请注意,空格也是字符!
输入“我是一个中国人 我热爱我的祖国 也热爱地球母亲!”,以如下方式索引字符串中的数据元素。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_1.jpg?sign=1738898090-GZTCqouBXehZDAUqfOfjV5yzw2NKBMOK-0-c57bb299ff6acf1c8df7d9f18493c01a)
代码运行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_2.jpg?sign=1738898090-AhP4AiIjmMh7G0UsObnwpIe8HutqucFN-0-9c29d85f1f3fa9ac67b08e9a782f3dcd)
可以看到,print(a[7])(正向索引的第7位)所对应的位置显示出来就是1个空格。
另一种常用的字符串操作是切片(Slice),即从字符串序列中选取相应的元素组成一个新的字符串序列。切片使用的语法为:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_3.jpg?sign=1738898090-H5uHc4RQ8WaEGtJLUS0W3wEPXlFwI64H-0-31fbaddb4bf86118954b08b128cf471f)
● 开始索引就是切片切下的位置,0代表第一个元素,1代表第二个元素,-1代表最后一个元素。
● 结束索引就是切片终止索引(但不包含终止点)。
● 步长是指在每次获取完当前元素后,切片移动的方向和偏移量,默认为1。当步长为正整数时,取正向切片;当步长为负整数时,取反向切片。
请注意,索引元素和切片元素都必须使用方括号[]。
读者可以通过如下代码自行尝试。需要说明的是,切片是在序列中选取某个范围内的元素的机制,列表和元组也可以进行切片。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_4.jpg?sign=1738898090-NpMCWmWBu7q6A2NfXvlCnV9Mil4FQKJB-0-889c561ede2fb3b85cf5098f50d026dd)
关于字符串操作,还有如下4个常用函数和方法,感兴趣的读者可以自行尝试,这里不再赘述。
● len(x)函数:字符计数。
● str(x)函数:把一个数字转换成一个字符串。
● subject.upper()方法:转换成大写字符串。
● subject.lower()方法:转换成小写字符串。
2.1.4 列表、元组、字典
在2.1.2节中已经介绍过Python的常用数据类型,如数字(Number)、字符串(String)、布尔型(Bool),本节将介绍另外3种常用数据类型:列表(List)、元组(Tuple)、字典(Dict)。
在Python中,我们既需要通过独立变量来保存数据,也需要通过序列来保存大量数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。在Python中,常用的序列结构包括列表、元组、字典等。
1.列表
列表(List)是用于存储任意数目、任意类型的数据集合。
列表是内置的可变序列,是包含多个元素的有序且连续的内存空间。列表是可变的,可以更改其中的元素的值,也可以添加或删除其中的新元素。可以直接对列表a1进行赋值,并修改指定位置的数值,代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_42_1.jpg?sign=1738898090-uGPfCNYymKpNf5MOgOIgoAyTdQTOT4v2-0-dff529c223a2f2eb8606da277770c646)
在列表a1中保存了6个数字,我们使用2.1.3节所提到的字符串的索引方式更改第一个元素的值,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_42_2.jpg?sign=1738898090-TJE7qXO7G8TeBj2J7VhScAZeF29rluMy-0-7416d911e60d49e5fa8823d3a47c6183)
可以看出,第一个元素已经被更改了,列表的索引也是从0开始编号的。在列表a1中,最后一个元素60的索引编号是5。列表中最后一个元素的索引编号等于列表元素的总个数减1。
除了像列表a1一样将使用逗号分隔的值放在方括号中,并且为列表中的元素直接赋值,还有3种方法可创建列表。
(1)为列表直接添加元素(将使用逗号分隔的值放在方括号中)。
(2)在内存中预留位置,然后添加元素(list1=[None]*sz),方法如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_42_3.jpg?sign=1738898090-nDyA0hOO8rJMOmbFK26jwFo27DnGEz22-0-b7ce47a148011049a0aaaf556105cb00)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_1.jpg?sign=1738898090-4k6Heg7z8DX55Sq8Agj0cwWoNGol3HeI-0-3ef4443af1eb81b606aae36901eaff7b)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_2.jpg?sign=1738898090-pPvt6XJRWtZtn3YgSqum4aNooaDKrnPw-0-f59da0a291e6cec9a65631230efd9c65)
(3)创建空列表,使用append()方法添加元素。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_3.jpg?sign=1738898090-mjd2RGrSAgln8GtXxMzr75W2RmN0ysoc-0-7ffaf4855eabd0f24ac6511fc5f718ee)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_4.jpg?sign=1738898090-Zv6rGy3PXtz52QRfAx39wOPd53OSq3qh-0-e1e8533f220282c5d515561c868ce444)
这3种创建列表的方法在未来的操作中将会起到非常重要的作用。
接下来介绍del语句,其可用于删除列表中指定位置的元素,例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_5.jpg?sign=1738898090-q2RKN6VaTjQpJJITE7pyhJD8vu6CXzAC-0-af9599cd94f0f270e1d0ec9bd0a6c9b5)
读者输入代码并执行后会发现,元素30已被删除。
2.元组
元组(Tuple)是不可变序列,元组中的元素不能修改,这是它与列表的不同之处。
元组没有能够增加、修改、删除元素的方法。如果想要创建一个元组,必须将使用逗号分隔的元素放入圆括号中。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_6.jpg?sign=1738898090-eYHIjkMLmAE1tyG2aw16bLnYFrRYx8Mi-0-f34bb873117b5a24725c518d8b248d50)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_7.jpg?sign=1738898090-JPTeADaTqKScbEsw3Jg2otzK5GjRZcSg-0-54a89924fc8b1296784fbcb0a1351673)
函数list()可以接收字符串、元组等其他序列、迭代器等生成列表。函数tuple()可以接收字符串、列表等其他序列、迭代器等生成元组。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_8.jpg?sign=1738898090-K7aMOchnO59MMI1ZE1OgBcGJNbQJ8sWN-0-17115f2bfd10af02de987500d8c6763b)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_1.jpg?sign=1738898090-B8eEn5Lo8ymxTrMNVeXLHU5cnghL5Oiw-0-3b21ef944d4ab1a1796f6b3dd0517084)
函数range()返回可迭代对象,函数list()和函数tuple()是对象迭代器,可以把函数range()返回的可迭代对象分别转化为一个列表和一个元组,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_2.jpg?sign=1738898090-UgrBvi78hQd1yaFF45EAUojE2ljMCIal-0-8f077fe7f0bd6b3f6db93e636671094a)
3.字典
字典(Dict)用于存放具有映射关系的数据。
字典相当于保存了两组数据,其中一组是关键数据,被称为键(Key);另一组数据可通过键来访问,被称为值(Value)。例如,姓名:小明,民族:汉族。作为键的数据和作为值的数据是互相关联的。字典其实是“键值对”的无序可变序列,在字典中,每个元素都是一个“键值对”,可以通过键快速获取、删除、更新对应的值。键是任意的不可变数据,并且不可重复,而值可以是任意且可重复的数据。
使用大括号建立字典,并且根据键访问字典中的元素,同时为字典中某个元素重新赋值。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_3.jpg?sign=1738898090-FFmZ0CWM4HCanDyKIY04wfTUKuXZLDZ9-0-f1133cd929b8d382e68846f0934dd8e5)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_4.jpg?sign=1738898090-IYbgn6Gdu8Ncmw06sgUhwFGtyWK23xgH-0-03d49d58209380e8f16d699f47ec162b)
这里补充说明一点,在字典中,可以使用键访问值和修改值。
创建字典的方法有3种:①直接使用函数dict()创建;②先使用函数dict()创建空字典,然后利用映射函数zip()构造字典;③先使用函数dict()创建空字典,然后利用可迭代对象构造字典,具体如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_5.jpg?sign=1738898090-Rg4hz8piJf5FRghfCl5GuaGSqT0t30Rb-0-3f540f0a9ce04f185eb35e268e3b8318)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_1.jpg?sign=1738898090-yNAowiWWAUFqMbVwJBwliREKZVDOiKLk-0-ab9b42e593864a598e2c00144796d64f)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_2.jpg?sign=1738898090-Xingy5YScIiy6pxp6JmTntynO5hngw2F-0-8ebd2fcc2c40559888acb26ab3a53aa0)
受篇幅所限,列表、元组、字典的内容无法全面展开,感兴趣的读者可搜索相关资料自行扩展学习。
2.1.5 顺序结构
目前为止,读者看到的代码都是按照它们出现在程序中的顺序执行的,这种程序结构叫作顺序结构。顺序结构是流程控制中最简单的一种结构,也是最基本的一种结构,如图2-3所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_3.jpg?sign=1738898090-j1tdoFO2PKMSGaKahntT76dp3LSXRtTn-0-1f50e3b9f9362bdf94007371ba9edce2)
图2-3 顺序结构
Python顺序结构就是指程序按照从头到尾的顺序依次执行每一条代码,不重复执行任何语句代码,也不跳过任何语句代码。
2.1.6 分支结构
分支结构即选择结构,是在对事件进行判断时产生的选择分支,其中只有一个分支会被执行。在Python中,可以使用if、elif和else关键字构造分支结构,一般分为以下3类。
1.单分支结构
在单分支结构中只存在if分支,这是最简单的分支结构,如图2-4所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_1.jpg?sign=1738898090-GKjy35cpKwPgFhF83VAxOSXBc2Zr9uPg-0-87dc6d9c6d0c5adba61113f9743f9d2c)
图2-4 单分支结构
单分支结构只执行True路径上的语句块,False路径上没有语句块,示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_2.jpg?sign=1738898090-nX4oUsBNPZqooDvzJbMamnLYu5tTFivW-0-185db57939793b051f6bcd281ee772c9)
如果输入input('您的年龄:39'),则代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_3.jpg?sign=1738898090-JxrHjsss1qCFExxNJJ0n0bDe9qx67FQT-0-2261b6e0a441c89d43df69c8a27ce671)
如果输入input('您的年龄:16'),则没有需要执行的语句块,直接结束。在这个示例中,我们又新学习了函数input()。在Python3.x中,函数input()接受标准输入数据,返回string类型的数据。在上面这个示例中,要使用函数int()将输入的数据转化为整数。
2.双分支结构
双分支结构是指在True和False两条路径上都有语句块。两条分支分别是if分支和else分支,如图2-5所示。
双分支结构的示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_4.jpg?sign=1738898090-zKfnm7St7Mlj7DPOuPSWvsqIZmWJhTbA-0-26ed7b1b5d355b09518b9356f2011eb8)
当输入input('您的年龄:30')时,执行else分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_1.jpg?sign=1738898090-XndrRxxPT3urWUepUIhg0gc466L0KXCA-0-904e1e1402c2e2cf78d2d11c252bb80e)
图2-5 双分支结构
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_2.jpg?sign=1738898090-xzBCgnX5BCcZnRW2UJv8CTRB57INrQat-0-0875bc80bdfd9ef10e42ceaa6be89a78)
当输入input('您的年龄:50')时,执行if分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_3.jpg?sign=1738898090-qdbBIE2k2Di5egmc4GonrkcNzV4LO5Xp-0-fb0cbd3e944a4b10093eb047f44f308d)
3.多分支结构
多分支结构扩展了可以选择的路径,其结构如图2-6所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_4.jpg?sign=1738898090-SegbbyfTDwD3BedsSgshQlvdLydTDpu3-0-4cf02c14ac075dba42c7ffa55e2e3e17)
图2-6 多分支结构
多分支结构的示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_1.jpg?sign=1738898090-TuP4klkaXHF3IOYtnZ1xTvh0kEx74aed-0-e84271345fb1060f946a281a0f5dd031)
读者可以输入上述多分支结构代码,然后输入数字自行尝试,此处不再赘述。
2.1.7 循环结构
循环结构是指在一定条件下反复执行某段程序的流程结构,被反复执行的程序则被称为循环体,能否继续重复执行将由循环的终止条件来判定。Python中的2种基本循环结构如下。
1.while循环
while循环的特点是,当满足条件时进入循环,在进入循环后,若不满足条件,则跳出循环,其结构如图2-7所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_2.jpg?sign=1738898090-R6gYyx8RUoq7kw0dhQWWPCAR5YmPR5Dr-0-cea3e21b21a057d8cb489f177d72592b)
图2-7 while循环结构
while循环是一种条件循环,只要循环条件给出的判断结果为True,循环就会一直持续,示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_1.jpg?sign=1738898090-EH0AncMOTKZlYH22cwVg3n9q6yhyVRhw-0-fcc9edeff32487cecdac5aa94a401682)
执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_2.jpg?sign=1738898090-ApdPNAwS1ksraIssPa5tVRJXqz3Kccaj-0-4cabe68ee931c00ce5fc229c478f1c43)
可以看到,当循环条件不被满足后,才跳出循环,执行后面的语句。另外,使用while循环结构可以较为容易地计算出一个经典的数学问题:1+2+3+4+5+…+100。使用while循环结构计算从1到100的数值和,示例2代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_3.jpg?sign=1738898090-NvJG5pnJ8IkDh5m0UFdI4Q6bLofAiMpN-0-1de313ee95614853c4bfd31e0d6bb25a)
2.for循环
for循环则是一种既能遍历列表又能遍历字符串的循环。使用for循环改写while循环中的2个示例,改写后的示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_4.jpg?sign=1738898090-eWZBvRjP5dfmHvQ9GeR7D7LSAEAdKZaD-0-f10600972664efe65befdec4e5080b95)
改写后的示例2代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_5.jpg?sign=1738898090-m5jMgKePlC2CeMEdzhYH61QP5tqjtvxy-0-1d7d98e24bebef869c679e4e0393cdc8)
这里简单扩展下,对于示例2的经典求和问题,还有一种更“Python”、更简洁的代码写法。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_50_1.jpg?sign=1738898090-geJw0Qqd5bRZnnWGpAu36Wl6yrMq4vUI-0-83eb5a14ec094f76d00dc82c1194c636)