![人工智能数据素养](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=1739023361-LLgXckKqxXfgmag5JImHeMEmRjk8YLai-0-d52da95ec9ade3031ca8870f3cf97127)
图2-1 Python的安装界面
安装路径可以选择默认位置,也可以自定义位置,如图2-2所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_32_2.jpg?sign=1739023361-sKbjRmIjpgUmv9FBZCQsSMdIdDDYwWxX-0-6d7b22d62e8e0d772d2ecb4bc82f8606)
图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=1739023361-ciUYEPqWIKD23grJ4RJ0NgGQHQf6y9BU-0-c83cbf9508813a3b584272dda6377f92)
保存后按键盘上的F5键,屏幕将显示如下结果。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_2.jpg?sign=1739023361-LRVMmfATLoCiiJJ9tGQZzhkQeFusWil4-0-7115bf274a470e5aac36b73e4b77057f)
上面的程序非常简单、易于实现,如果之后需要编写非常复杂的代码,那么程序将变得十分复杂、难以理解,此时要如何编写呢?
使用注释就可以给程序添加解释并补充其他信息,让复杂的地方便于理解。在Python中,可以使用哈希字符(#)将注释添加在语句上方或末尾处。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_3.jpg?sign=1739023361-h7Iwrh4Pp4NFca4SQWLN65jpoU64an6u-0-e037e8a96e2faa6d636f1d57066ddd2a)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_1.jpg?sign=1739023361-Dt7YlJK7NmlGDYZ8G1uqEhFt9hJ3Qy73-0-a3c8ef2e5448f87f735118ded0caf6bb)
在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=1739023361-32hRJen7o6CqBWArcf4WE0X4bAvGyOyH-0-4acaeef99e34257aad205b555f3e1676)
例如,声明一个数值型变量Shuz。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_3.jpg?sign=1739023361-Tnl86L8K6xNuHm216g9FmPDoE1yT6mRe-0-d9e49f0db64481bf3547e0ace03ae70e)
#创建一个变量Shuz,给它赋值为9999
变量的类型可以随时变更,也可以重新为变量Shuz赋值。同时,允许多个变量指向同一个值,如num1=num2=100,此时的变量num1和num2具有相同的内存地址,可以使用Python的内置函数id()返回变量所指的内存地址。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_4.jpg?sign=1739023361-IUXAzvzVzIjuYjo8BOUxo0PAhDnRXco5-0-3cd0b198a7301be3a1d195d1ca4875e0)
结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_1.jpg?sign=1739023361-vZPsLfVabeP3oRM30MEUfMF2EJX8txcc-0-c09447479baabf4e4a26620cfd67459f)
在Python中,最常用的运算符是赋值运算符“=”。此外,Python还提供了复合赋值运算符,如表2-1所示。
表2-1 复合赋值运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_2.jpg?sign=1739023361-8xDpqhQi9LLfz2wnN6Nam68weKu3A8sp-0-50e4bbe617f0f257e9fa410c50dbe891)
使用方式举例如下。
● 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=1739023361-yEtPVkKdehEOQLLCqLRzklVtLlpYhB0T-0-b931ae2abe28af303f9eb9a45ed4aafe)
算术运算符与数学运算一样,遵循运算的优先顺序,即先幂后乘除,最后加减。若优先级相同,则按照从左到右的顺序执行。另外,在Python运算中,不存在大括号与中括号,只有圆括号(),且圆括号内的运算优先执行。例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_2.jpg?sign=1739023361-RJK3smUvYpeGNANpCr2arsYbzEEFZ6Zx-0-6204ca4c4fd0c8a6f903d92b8b122495)
读者在计算上述列式后如果得出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=1739023361-t20fX97nU8hWqZUaRRPFehxBBWCL0i03-0-7c43af12c6a48ef068ecf5f8639a9133)
通过以下示例对拼接字符串的运算符进行简要说明。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_4.jpg?sign=1739023361-EYhHxRVHcfNTrLOce6h6MT3oNKW0XNtI-0-92b05dd57c43626969d7d6fb113dcbf0)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_1.jpg?sign=1739023361-AgLHnIHCRu8QqrVroyLwcvO8cGO7qEA7-0-08d9b39a0888026a3981240a1d086a1f)
运行代码后,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_2.jpg?sign=1739023361-dQoDk7YnPZRp3qCzcPevswDvuSp0AMg9-0-e9c696105b98e6a7f4034921c55788c7)
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=1739023361-eLF7OCxfJ88hvzxsjuZKO7T8DMJz8AkW-0-43518100832da8e347e0c9c3d512ae5f)
这时,请思考以下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=1739023361-F7CldT6sA3lH9U532KyTraNufMosXB1C-0-e60303071bbbd70f877a802542c3e5d7)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_1.jpg?sign=1739023361-UFIzLQoOYrGHcRXzRk88A4eE7ov9i7Po-0-59dafb9bb72bbde12ec1dfa3f72c6f53)
计算机在判断后,将给出答案True或False。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_2.jpg?sign=1739023361-sBH3FsUd0QwShxuJNklSTKLE3RYvFHBK-0-b84e6daf340751709275898981751beb)
初学者应注意的是,赋值运算符“=”和比较运算符“==”存在本质区别!布尔表达式比较复杂(复合布尔表达式),使用逻辑运算符相连。那么,逻辑运算符又有哪些呢?如表2-5所示。
表2-5 逻辑运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_3.jpg?sign=1739023361-6B42oOBkLL1fIEhbp4VFClpQHP9LeVsf-0-f9691c3ac82b689f3d40dfb8c1845a39)
以下为逻辑运算符的演示代码,读者可以先自行对这3个复合布尔表达式进行判断。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_4.jpg?sign=1739023361-UYH2J0rZuRT4cNCcxQzWj1nYo07RD31L-0-40f7a71fc80da9326ac953bf48f3f950)
计算机输出的结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_5.jpg?sign=1739023361-stndaANvkZu5i4lx1uGuWk0hlJLzEePR-0-09ece179a2d2f3e37d05e53725ee3b34)
如果自我判断的结果与计算机输出的结果相同,说明已基本掌握了逻辑运算符的相关知识。另外,运算符是有顺序的,其优先级顺序如表2-6所示。
表2-6 运算符的优先级顺序
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_39_1.jpg?sign=1739023361-oYMVm5x4INmxWgHcWVezaDas4IaJq0nO-0-1f163b7d8d18960253319ee323a0d2af)
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=1739023361-2EItQxN1ehSpMOOaDqgGW107SLQqhGvS-0-33cf0c191623a2050a80ec4761b6b264)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_1.jpg?sign=1739023361-kZ1t0vYg6joFCtKZ501UiGUKzQf4tMqq-0-3e4b108f857c4631e5fa80349f13abf8)
读者可自行编写代码,对比自己的运行结果是否与下方运行结果相同。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_2.jpg?sign=1739023361-QIynRMLkG6rT7dtmvDdT0Hxp0iISbL6o-0-9a56d9ae1aff0464aff5d92f4323e58c)
接下来介绍求和函数fsum(),此函数不同于前4个函数,使用时需要导入math库。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_3.jpg?sign=1739023361-tdOXh0kW3dmOwrp2iCZHNLgLi6hVy1k5-0-66763cabaf64a66b64076901f033ccab)
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=1739023361-mUAoqteeH4iozzO02YHsbOpW911XJP0v-0-c59ab0d3bb96d4b4864f0f1fde41d715)
代码运行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_2.jpg?sign=1739023361-tCD526bnoBtJDBRXXp4Wg2P3SsVxl8X0-0-81dcca9302bc718f4557cbf2461b1505)
可以看到,print(a[7])(正向索引的第7位)所对应的位置显示出来就是1个空格。
另一种常用的字符串操作是切片(Slice),即从字符串序列中选取相应的元素组成一个新的字符串序列。切片使用的语法为:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_3.jpg?sign=1739023361-D3ilHO61EAz26vR6bmAKTLFteH0Nwrom-0-98395b1683add8efc70e208a33acde37)
● 开始索引就是切片切下的位置,0代表第一个元素,1代表第二个元素,-1代表最后一个元素。
● 结束索引就是切片终止索引(但不包含终止点)。
● 步长是指在每次获取完当前元素后,切片移动的方向和偏移量,默认为1。当步长为正整数时,取正向切片;当步长为负整数时,取反向切片。
请注意,索引元素和切片元素都必须使用方括号[]。
读者可以通过如下代码自行尝试。需要说明的是,切片是在序列中选取某个范围内的元素的机制,列表和元组也可以进行切片。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_4.jpg?sign=1739023361-4qEuhuBYBB9xqbAfWjPkMYjfvs1RNxQT-0-d39d6eb191e6561337468a0336d98ff1)
关于字符串操作,还有如下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=1739023361-1c5bWuplRpWT4Zy7uUiU0vmLTXO0sKPK-0-d4a3baeff3bfe9b0e9edb36011969b5f)
在列表a1中保存了6个数字,我们使用2.1.3节所提到的字符串的索引方式更改第一个元素的值,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_42_2.jpg?sign=1739023361-TMOtsYjlDhExYeOkJ4ZGwSUczWwDNodT-0-50569c833f13a8aedef56ee4ba72d9ab)
可以看出,第一个元素已经被更改了,列表的索引也是从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=1739023361-AQdgPjvTfMIiFz771IJAI7V1X9kEqjvW-0-a294f2cc7efd1925d799137c73d0ca05)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_1.jpg?sign=1739023361-KF3k5D29tD0PUahTGyDLmXxuUQb1wKgn-0-66dfbed81a59e47cb4613fe4d49d4259)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_2.jpg?sign=1739023361-Xmif2ockF4hsc7Hd76me1VswRGhHwsIk-0-0e09db7a6ea4488521005c6010d4b5c3)
(3)创建空列表,使用append()方法添加元素。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_3.jpg?sign=1739023361-E0qO4h989U0ZSBNmLhGa0RoQVs6VD2Wn-0-2ee77f97e5f3cf5ccbe209567138280b)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_4.jpg?sign=1739023361-LGfJXPHelEyS62XuZXiUyiEohUPWBFuT-0-f043312127fe764a688099ff7ce75520)
这3种创建列表的方法在未来的操作中将会起到非常重要的作用。
接下来介绍del语句,其可用于删除列表中指定位置的元素,例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_5.jpg?sign=1739023361-yBLHoDScGXbbspXiEgs3s7xOMyxAjgB1-0-98a946dec95a704303760d9cca0fd3ec)
读者输入代码并执行后会发现,元素30已被删除。
2.元组
元组(Tuple)是不可变序列,元组中的元素不能修改,这是它与列表的不同之处。
元组没有能够增加、修改、删除元素的方法。如果想要创建一个元组,必须将使用逗号分隔的元素放入圆括号中。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_6.jpg?sign=1739023361-tdof1ZJElhr9Xdvudqd0OfZsgMrEqDXt-0-6244c1b50a4cdee2dfaf2e9018918e7f)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_7.jpg?sign=1739023361-Kk3bGgaqqmWdvMobcKXT2medR38SDIhd-0-7ec692c32615f19aa21b91c450938f3f)
函数list()可以接收字符串、元组等其他序列、迭代器等生成列表。函数tuple()可以接收字符串、列表等其他序列、迭代器等生成元组。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_8.jpg?sign=1739023361-mSnjlEeqik6YRISzGp0sEGwpZJt3fgiv-0-3ab87b303c4a9aec0e688284a858f8e8)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_1.jpg?sign=1739023361-JgkX4JAbF7e3TC4lISwzkkp3QVlPLJaQ-0-6399da47a64a3863e76feb6afd842d6c)
函数range()返回可迭代对象,函数list()和函数tuple()是对象迭代器,可以把函数range()返回的可迭代对象分别转化为一个列表和一个元组,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_2.jpg?sign=1739023361-J6JMWjVAwPxHO9gFtBklVo9EeydMEGjY-0-39f733754ef552e0c9712af028e23232)
3.字典
字典(Dict)用于存放具有映射关系的数据。
字典相当于保存了两组数据,其中一组是关键数据,被称为键(Key);另一组数据可通过键来访问,被称为值(Value)。例如,姓名:小明,民族:汉族。作为键的数据和作为值的数据是互相关联的。字典其实是“键值对”的无序可变序列,在字典中,每个元素都是一个“键值对”,可以通过键快速获取、删除、更新对应的值。键是任意的不可变数据,并且不可重复,而值可以是任意且可重复的数据。
使用大括号建立字典,并且根据键访问字典中的元素,同时为字典中某个元素重新赋值。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_3.jpg?sign=1739023361-UwISc8BjmHIJBdMYDF7mwA4pOGbph3I2-0-e192535537e496e1b165d12f5e90ac23)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_4.jpg?sign=1739023361-LRPyMsEPKIyRt9ukQEimqjwi3LrBZ98a-0-404aab126a0114887e0cd3232ed865e5)
这里补充说明一点,在字典中,可以使用键访问值和修改值。
创建字典的方法有3种:①直接使用函数dict()创建;②先使用函数dict()创建空字典,然后利用映射函数zip()构造字典;③先使用函数dict()创建空字典,然后利用可迭代对象构造字典,具体如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_5.jpg?sign=1739023361-5IAmJihSMkMLIWSE2IaKtCG2vnjHcr4V-0-eb6788917a012165ff8126fa71492746)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_1.jpg?sign=1739023361-CHhchbWNqF7dLqvuM2QDGdVXb71iYo1p-0-9ac12f1d83a2009e3b82edf13e867728)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_2.jpg?sign=1739023361-asBKLQYgwq3lf7W89c9BRwkuNlOBDb1n-0-c60bade433ede91a7da28d8435ad5491)
受篇幅所限,列表、元组、字典的内容无法全面展开,感兴趣的读者可搜索相关资料自行扩展学习。
2.1.5 顺序结构
目前为止,读者看到的代码都是按照它们出现在程序中的顺序执行的,这种程序结构叫作顺序结构。顺序结构是流程控制中最简单的一种结构,也是最基本的一种结构,如图2-3所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_3.jpg?sign=1739023361-gHlrlToKYUKUjWAGupNWUY83Kl7lXTpe-0-5b63e53d4b8ace99e322004738ee8509)
图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=1739023361-thbZcxGT9L3tzw7mYBWLOaeskv7dCtDV-0-48fe009e2a4cb9a4065166f35e22dcaa)
图2-4 单分支结构
单分支结构只执行True路径上的语句块,False路径上没有语句块,示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_2.jpg?sign=1739023361-LjOQ6CP80rZZRKiYhjfSCU5Z8NYfcDAJ-0-9910ed4ceb01ef9272cb87e0351bcac8)
如果输入input('您的年龄:39'),则代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_3.jpg?sign=1739023361-8mgeH2y8rP3aA71EDeUowAb4ZiJb4SsC-0-4c8c6c18508d352cdb87f3859fb658cf)
如果输入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=1739023361-IS04sEsohv2eFsyfn7mJLTzkbecybt9O-0-87d68b07a910c46afbe1d54b1b6ac861)
当输入input('您的年龄:30')时,执行else分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_1.jpg?sign=1739023361-6gd0xT8MxxoEarihgpkiAOD0OlN98QNK-0-44e6168d7dbf81fa11c5d5bc8c573cb6)
图2-5 双分支结构
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_2.jpg?sign=1739023361-m1XgLzLWfqQs1AnFfYF8JiIf5qeTf2Nf-0-b8949ea213639069850eafe2427c1fc4)
当输入input('您的年龄:50')时,执行if分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_3.jpg?sign=1739023361-4jKKz60BLFJCDbItQgte0SoEKh8rBd1O-0-c562bdc314375f79696142cf2fed5822)
3.多分支结构
多分支结构扩展了可以选择的路径,其结构如图2-6所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_4.jpg?sign=1739023361-WBjhzBjKPc041bX75iURRcnzyav15UmA-0-c37969738c845500438358ab72b3b81d)
图2-6 多分支结构
多分支结构的示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_1.jpg?sign=1739023361-n0l1Iv9ZlYqMHe8tP1P2cqK86QlR4tKp-0-680f728b4a1d7cc2021b414a62f8ab73)
读者可以输入上述多分支结构代码,然后输入数字自行尝试,此处不再赘述。
2.1.7 循环结构
循环结构是指在一定条件下反复执行某段程序的流程结构,被反复执行的程序则被称为循环体,能否继续重复执行将由循环的终止条件来判定。Python中的2种基本循环结构如下。
1.while循环
while循环的特点是,当满足条件时进入循环,在进入循环后,若不满足条件,则跳出循环,其结构如图2-7所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_2.jpg?sign=1739023361-JCF2UZI86SVrc93fO6N4ozbmehKlPU29-0-a8a1bfed946f63aecfbd6061fa0a2dab)
图2-7 while循环结构
while循环是一种条件循环,只要循环条件给出的判断结果为True,循环就会一直持续,示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_1.jpg?sign=1739023361-qG9bLSpfO1QDSP7RglYlr6wn18isr4Da-0-e390a35e74ea7f159a74749d85a632c5)
执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_2.jpg?sign=1739023361-SVTdu7QFsLuXfk2DaUt5JRwMaRFn3gDt-0-ae65f6cc7a1ea788a76bba9e360f04de)
可以看到,当循环条件不被满足后,才跳出循环,执行后面的语句。另外,使用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=1739023361-N3wpVPnw89OhcPOHACp0QrXSMO4pvm0N-0-81ac7e04dd558a91fd9a447e37f7e197)
2.for循环
for循环则是一种既能遍历列表又能遍历字符串的循环。使用for循环改写while循环中的2个示例,改写后的示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_4.jpg?sign=1739023361-fN9dmhSNNZcH4vekAhiu0QfZ6SukASBm-0-74879f03f3ea66c6f8b82332b634d10a)
改写后的示例2代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_5.jpg?sign=1739023361-sb88mffw5i8z4vo7ExiOtjuUjbQISOGh-0-e8fa9595fdf9cf0b352ff5ac524e67b7)
这里简单扩展下,对于示例2的经典求和问题,还有一种更“Python”、更简洁的代码写法。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_50_1.jpg?sign=1739023361-IH6NJPR2GGrn8N5ImiCTsvWArz5cJp0h-0-cd7205c721b07580a67ab9dbfc24c9be)