![人工智能数据素养](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=1738933745-pYQoyJGOsGI7ghw35hHkSA8jXJ9BD87w-0-c150af9c273c0a5aebe0223ab9046902)
图2-1 Python的安装界面
安装路径可以选择默认位置,也可以自定义位置,如图2-2所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_32_2.jpg?sign=1738933745-rruOxSIlJ9yGBsIH26T27pZp7YQp4Ikf-0-af560bab4b94e45feda1d2b5c85356f8)
图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=1738933745-e6E9V9a2oH2jBU1Z0fjAodhPIOEfGJJf-0-3dd9ac55876ba08ebcc0ad926fa10466)
保存后按键盘上的F5键,屏幕将显示如下结果。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_2.jpg?sign=1738933745-Fg3M8vXwOYDRc0Qq6zjGeNm87sxWere5-0-f4cd0c7a24efb19032dcafe932fd983e)
上面的程序非常简单、易于实现,如果之后需要编写非常复杂的代码,那么程序将变得十分复杂、难以理解,此时要如何编写呢?
使用注释就可以给程序添加解释并补充其他信息,让复杂的地方便于理解。在Python中,可以使用哈希字符(#)将注释添加在语句上方或末尾处。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_3.jpg?sign=1738933745-pBY5bZ8w7fwcswq9vmqm5JpSpPrCCfhz-0-11cfac1c612239d050d4ae32a27f0ab6)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_1.jpg?sign=1738933745-HuM8hloYFkTBH4poaJP6Op8PUAhFhZhf-0-be8b04b71465863b1bf50f71e2a590cb)
在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=1738933745-6CwdHw9MgGZAkNPtd5wR5eitzvsU5Uem-0-4bb7881fa81e3457d59b234e8bffa1d6)
例如,声明一个数值型变量Shuz。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_3.jpg?sign=1738933745-zv6OVY4NyWKcMnRGoEuhjUNU5wN8gxWV-0-9b36663b608ee69084cb26de327c55bc)
#创建一个变量Shuz,给它赋值为9999
变量的类型可以随时变更,也可以重新为变量Shuz赋值。同时,允许多个变量指向同一个值,如num1=num2=100,此时的变量num1和num2具有相同的内存地址,可以使用Python的内置函数id()返回变量所指的内存地址。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_4.jpg?sign=1738933745-ywVPqTsE2ah7Y3cTEbMLH3C4iMJikKPd-0-d51d7a19c2ebec7703042894ae17eddf)
结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_1.jpg?sign=1738933745-4wkf72PjUUIQoqwOyIl5fM7LuwT1i0Ev-0-b150b0c8d6896b30a037412cf0cf62fe)
在Python中,最常用的运算符是赋值运算符“=”。此外,Python还提供了复合赋值运算符,如表2-1所示。
表2-1 复合赋值运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_2.jpg?sign=1738933745-pxTPrCJDmnIMgZ7vjjFm0qEcghF2o6Ik-0-f426d42cd088aa26dec308d6cc3574e3)
使用方式举例如下。
● 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=1738933745-SfAtqZLry34m3CsBUEGp1AOkzsBvaDGR-0-bd274b03e1fccf315936b07b4f39c596)
算术运算符与数学运算一样,遵循运算的优先顺序,即先幂后乘除,最后加减。若优先级相同,则按照从左到右的顺序执行。另外,在Python运算中,不存在大括号与中括号,只有圆括号(),且圆括号内的运算优先执行。例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_2.jpg?sign=1738933745-KA7RTAIJkJ7TV1w23WqGvUn4mTlkM1dr-0-dac941d9b4fdedb31752fa80750853b0)
读者在计算上述列式后如果得出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=1738933745-jwm0KZzQ5p1sln2pCwsjHd4PLuCrWzaJ-0-1ae4629c274af6929688e8d11f899bd6)
通过以下示例对拼接字符串的运算符进行简要说明。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_4.jpg?sign=1738933745-ryLoUEFN57ulz1gOxwUxNMWboL406JBi-0-f2ef8d444e5ae64887606564e9723ffa)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_1.jpg?sign=1738933745-zay65rEDbDh7nrz7UBdAlOI4ayDc2kty-0-0e0c5d3c698657f4a763d80e22b38aa9)
运行代码后,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_2.jpg?sign=1738933745-bsZ1zMp1AwDJcmoRToLbLqudVlPKj9nV-0-73799d3a179aa603d41cb34ca2c27fd3)
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=1738933745-NEL3hWWFonGBUXln7FEmbcV0z8kgurZk-0-8e2dcb4b52b6ce23d00fad6e0d90a467)
这时,请思考以下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=1738933745-Q7lyPT9WBmj3Jfb5HgrpV75BfymvMOKe-0-37a7f6b1fc8acdf58864f00b3a663cc4)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_1.jpg?sign=1738933745-BUNBgDQn65GfM2PsdF43MDAh8uAFWgNn-0-d7d152201763a209c1bd95245a484261)
计算机在判断后,将给出答案True或False。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_2.jpg?sign=1738933745-xc4gmzoJGP5XGlCWJgcmukSVcsl6q6FT-0-8ada1194bd219a28a61d1ccd540dad2a)
初学者应注意的是,赋值运算符“=”和比较运算符“==”存在本质区别!布尔表达式比较复杂(复合布尔表达式),使用逻辑运算符相连。那么,逻辑运算符又有哪些呢?如表2-5所示。
表2-5 逻辑运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_3.jpg?sign=1738933745-podGXYzmQGk1wZhe61myUXxbEZ06uJWb-0-90169f1f4e3891d9cda1100807e53d42)
以下为逻辑运算符的演示代码,读者可以先自行对这3个复合布尔表达式进行判断。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_4.jpg?sign=1738933745-hh41tZxRX0PTvMdj6qVKGA66dwXu78En-0-d5e509c2e4d7070c2dca2809ec23d2b7)
计算机输出的结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_5.jpg?sign=1738933745-zeHSvGMrqgpC6wF7BFajmZmAkz86PSJ4-0-426baf40837f26ca4bf609d4a7b4d819)
如果自我判断的结果与计算机输出的结果相同,说明已基本掌握了逻辑运算符的相关知识。另外,运算符是有顺序的,其优先级顺序如表2-6所示。
表2-6 运算符的优先级顺序
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_39_1.jpg?sign=1738933745-t6kHGE8OVmsRN7G6BcEZBhzAEKq8tsXQ-0-b8a9dadb565a3a188cae636983d0b8b2)
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=1738933745-ieTmswPJXb0YFj0nEKXfq7tbIY6hAG1Q-0-5914f28478bf5600f05a18f531e61576)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_1.jpg?sign=1738933745-0qWYB1q2iYtjMpHq56JBA8aUyjJcaxZ8-0-47a5b1724b83b1550216e8566fd7f89d)
读者可自行编写代码,对比自己的运行结果是否与下方运行结果相同。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_2.jpg?sign=1738933745-8OHXDOxfFug4nHivJ3l4g3ivoIZLkiT2-0-c418f351df256094ea0485e41fe978c6)
接下来介绍求和函数fsum(),此函数不同于前4个函数,使用时需要导入math库。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_3.jpg?sign=1738933745-gQiDuUctEKhh0AZlPLcj1IK4ih38knGH-0-cbef4be0ab646a1004b3b7d851143186)
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=1738933745-XtJTzjyKNeDSN3WDEQ9rnbq0PDz3ZhHf-0-e4c908459d6d7ce43b472fb426bcac82)
代码运行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_2.jpg?sign=1738933745-tOpLjAohIpBhamZuMJR817KnwyPDMO7j-0-acb25248a18ed0d419ea5ddb75877552)
可以看到,print(a[7])(正向索引的第7位)所对应的位置显示出来就是1个空格。
另一种常用的字符串操作是切片(Slice),即从字符串序列中选取相应的元素组成一个新的字符串序列。切片使用的语法为:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_3.jpg?sign=1738933745-bsqEE5Ayj6gTBtUHgdHMUFju0AwMFISm-0-d24616a7654de68c1b89856b4adc392f)
● 开始索引就是切片切下的位置,0代表第一个元素,1代表第二个元素,-1代表最后一个元素。
● 结束索引就是切片终止索引(但不包含终止点)。
● 步长是指在每次获取完当前元素后,切片移动的方向和偏移量,默认为1。当步长为正整数时,取正向切片;当步长为负整数时,取反向切片。
请注意,索引元素和切片元素都必须使用方括号[]。
读者可以通过如下代码自行尝试。需要说明的是,切片是在序列中选取某个范围内的元素的机制,列表和元组也可以进行切片。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_4.jpg?sign=1738933745-d7IM9hi1uhSeKLNZHwPmEyXMOUvcscpI-0-12f899e8e3b7adb5641d7a3623ffc0cc)
关于字符串操作,还有如下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=1738933745-IoF5Bkjs42cvb293iBHiZyhOvNOwtYuy-0-0d0c4a89104f275b0336e6a19eccdc89)
在列表a1中保存了6个数字,我们使用2.1.3节所提到的字符串的索引方式更改第一个元素的值,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_42_2.jpg?sign=1738933745-yNQHsSEUfoEYbHEesmld1HVsJkcjBj6b-0-b7740b9d95cb46cb1e0adc6ffc664d69)
可以看出,第一个元素已经被更改了,列表的索引也是从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=1738933745-ztrlNuLhe1TJfMoNoaSpdskqW1jfJAIm-0-5af462121af8ce50837dc4ae9bb193fc)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_1.jpg?sign=1738933745-UesXwWNgV7KifWdayJbd0sRabVwTbU4P-0-6e6876acd1d7b4bb2281f67765c76cda)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_2.jpg?sign=1738933745-Sk5ZrCJBkBtxSFWeazZj1gyHZu8TAlp7-0-f9ab258463aacfa5cd5cb2afa11d7ad2)
(3)创建空列表,使用append()方法添加元素。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_3.jpg?sign=1738933745-CCK0gncQCwymzUGJV3x9fDGLnWzTErX3-0-da624655e94db1084b13d7becd78e92f)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_4.jpg?sign=1738933745-U2xKVvRv165IODRna3AeuuX1G7vMcZTT-0-b01d585983b54196c024ad8216ccb2a9)
这3种创建列表的方法在未来的操作中将会起到非常重要的作用。
接下来介绍del语句,其可用于删除列表中指定位置的元素,例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_5.jpg?sign=1738933745-LaQ0F4lW5bNTth9G0W2Nji7Svnhr8CWE-0-40c47a4108f7061c2534ed0ae9819509)
读者输入代码并执行后会发现,元素30已被删除。
2.元组
元组(Tuple)是不可变序列,元组中的元素不能修改,这是它与列表的不同之处。
元组没有能够增加、修改、删除元素的方法。如果想要创建一个元组,必须将使用逗号分隔的元素放入圆括号中。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_6.jpg?sign=1738933745-kwGa7FBfIlCFoA8w7MoRCFhigQ6F4y6z-0-f6e3d9542052ab1cec4829dc81debf40)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_7.jpg?sign=1738933745-BBLrDeHcJCvr6SvxjXyAUKNrRbuwkGHn-0-9e971f5a29ab207e3f9a9590dbb8bafd)
函数list()可以接收字符串、元组等其他序列、迭代器等生成列表。函数tuple()可以接收字符串、列表等其他序列、迭代器等生成元组。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_8.jpg?sign=1738933745-bsBD9MUH7kGctw1k7qn0IbeH2senL7BO-0-854fdf0aa9b99575b956b41e962bb743)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_1.jpg?sign=1738933745-gxRqB4CioqseBu404ArqE86GQcpdmok2-0-ed7f1d232132699a59184614ec6fe482)
函数range()返回可迭代对象,函数list()和函数tuple()是对象迭代器,可以把函数range()返回的可迭代对象分别转化为一个列表和一个元组,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_2.jpg?sign=1738933745-DM2vCIY2SGKTxlMUadAcAdTtB3pCovNO-0-046e2851f5c6dc9a9d0bb0d7c9f3019c)
3.字典
字典(Dict)用于存放具有映射关系的数据。
字典相当于保存了两组数据,其中一组是关键数据,被称为键(Key);另一组数据可通过键来访问,被称为值(Value)。例如,姓名:小明,民族:汉族。作为键的数据和作为值的数据是互相关联的。字典其实是“键值对”的无序可变序列,在字典中,每个元素都是一个“键值对”,可以通过键快速获取、删除、更新对应的值。键是任意的不可变数据,并且不可重复,而值可以是任意且可重复的数据。
使用大括号建立字典,并且根据键访问字典中的元素,同时为字典中某个元素重新赋值。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_3.jpg?sign=1738933745-dIBkiJjMsNs1OMu1EgR8jcjToDDjpTTQ-0-f05e337bc93a89bd61ce19266ef9f2dd)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_4.jpg?sign=1738933745-A0b2Oq82xPAPTQtMHP6L7bwuNn3cUhoV-0-e0f00a8131ef24f1b1a045f1499acfff)
这里补充说明一点,在字典中,可以使用键访问值和修改值。
创建字典的方法有3种:①直接使用函数dict()创建;②先使用函数dict()创建空字典,然后利用映射函数zip()构造字典;③先使用函数dict()创建空字典,然后利用可迭代对象构造字典,具体如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_5.jpg?sign=1738933745-pJi84e3JED3Ok47ZjwEQ9i0M9ZyUVyXW-0-1293b956abe4a6ca147551c3087f4393)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_1.jpg?sign=1738933745-igrepFiQ118HJN2sIgPWrcQ0ggzfsRnk-0-71e7ff5f592a6e1f5d5d0fb290c15ecc)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_2.jpg?sign=1738933745-qFVargFMv21SigWy1Ekm2MqQiZgtZbAO-0-c3983adf3241747314e97be20ae1875b)
受篇幅所限,列表、元组、字典的内容无法全面展开,感兴趣的读者可搜索相关资料自行扩展学习。
2.1.5 顺序结构
目前为止,读者看到的代码都是按照它们出现在程序中的顺序执行的,这种程序结构叫作顺序结构。顺序结构是流程控制中最简单的一种结构,也是最基本的一种结构,如图2-3所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_3.jpg?sign=1738933745-Zv2tRfn1WFtz0XG9YfzWGc009mnMLIbS-0-78c9ae78bfea0994453e3701b8962d87)
图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=1738933745-tfK7uduPYzrF9O4QKw9udAQnhExWYepN-0-6c6bcb1b9c7c1e2181b48794b77fab4d)
图2-4 单分支结构
单分支结构只执行True路径上的语句块,False路径上没有语句块,示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_2.jpg?sign=1738933745-EMEhH90bvB1XKJmfo3uKSDPiws1LKKT9-0-e05150e95a142719a8c8c69dac312fd9)
如果输入input('您的年龄:39'),则代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_3.jpg?sign=1738933745-8lNNgreD9drloIyN3xUoREJXRTqJJtpl-0-79537aa6e32aa021686d24e6eed3af76)
如果输入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=1738933745-QjlOJuK0refPwGo0tyXLRQDgVVK2oXvF-0-a80826aed2791c8c69e701d08115daf6)
当输入input('您的年龄:30')时,执行else分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_1.jpg?sign=1738933745-pzmJPQbAruCpFcOjH1L8nq1fwD41swNr-0-7b545a5837c19c62baacd32b54d8bb40)
图2-5 双分支结构
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_2.jpg?sign=1738933745-JRtCU9Vn2LLr9j8D4SZHjrXq2TzJutHk-0-487b7ce0c3ed8702ad6a4a71cee7db4a)
当输入input('您的年龄:50')时,执行if分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_3.jpg?sign=1738933745-zyiDOf81kchQDfAg7YAVccoowTb72Ef3-0-8202d68076b8d41efeb22fedd745dd9a)
3.多分支结构
多分支结构扩展了可以选择的路径,其结构如图2-6所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_4.jpg?sign=1738933745-tRHYNMEr7I2XJUmaNMmSZNNEQq0iRbS5-0-3534df7e21dd4772acfdb95fe848dfbe)
图2-6 多分支结构
多分支结构的示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_1.jpg?sign=1738933745-R2fSwBXkPWWS2VY5AmMlJCDWOzSy3lqd-0-a3d25187862fe0e3f9e4e1aec7d245f8)
读者可以输入上述多分支结构代码,然后输入数字自行尝试,此处不再赘述。
2.1.7 循环结构
循环结构是指在一定条件下反复执行某段程序的流程结构,被反复执行的程序则被称为循环体,能否继续重复执行将由循环的终止条件来判定。Python中的2种基本循环结构如下。
1.while循环
while循环的特点是,当满足条件时进入循环,在进入循环后,若不满足条件,则跳出循环,其结构如图2-7所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_2.jpg?sign=1738933745-bsD1JrOzMEuFEAZh2aCock0OatJlUiKp-0-857d2c871df6f2cc55a57857fc823e57)
图2-7 while循环结构
while循环是一种条件循环,只要循环条件给出的判断结果为True,循环就会一直持续,示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_1.jpg?sign=1738933745-0d9xbQ1IxlJMydV53ZlVtRGqcrgnqNlU-0-94cd9dec3b48239a252c650300b638f2)
执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_2.jpg?sign=1738933745-5aA91xIyB0saXaAtiAQgP3ykVP0pXT8S-0-6a6dad17a98f847023d17af227a70961)
可以看到,当循环条件不被满足后,才跳出循环,执行后面的语句。另外,使用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=1738933745-u6MBrxFrsyZ1JhKe4t4FEqlktP17g466-0-52cc55b1e5dc482f5eb0b5d64ef48e98)
2.for循环
for循环则是一种既能遍历列表又能遍历字符串的循环。使用for循环改写while循环中的2个示例,改写后的示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_4.jpg?sign=1738933745-anij0yTNG08IRaCt6PUaWrRroNxS75Js-0-ea7ae5e6a739d378217b6d5e99990197)
改写后的示例2代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_5.jpg?sign=1738933745-0YNMypKEpU26OEcjl6AAKPmCioXZVAwY-0-c244e4b74d0fe4f858f35edc8855c635)
这里简单扩展下,对于示例2的经典求和问题,还有一种更“Python”、更简洁的代码写法。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_50_1.jpg?sign=1738933745-zBGNms1TMbvlmsfW5RPKcybtR3T9bdfl-0-e122309f8a454c50f0d5fbefdc636526)