![人工智能数据素养](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=1738897996-oz00hwdctKGjZpwvdsxQ1oyKUgk6sAp1-0-3ffc2cc7183891d2f22d606d11fce909)
图2-1 Python的安装界面
安装路径可以选择默认位置,也可以自定义位置,如图2-2所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_32_2.jpg?sign=1738897996-wwIoMf2xfULhKJf1eLVwW8JlNNdbBhew-0-529c94af504149d62f2d5c9fac176b35)
图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=1738897996-ZkW2aNDQTMithqay2dwXhX3iF94sbFod-0-34717a2c163646bfa98f3af1bc3bc2f8)
保存后按键盘上的F5键,屏幕将显示如下结果。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_2.jpg?sign=1738897996-5U76TDQjH1wcFh3lcj1wct9ePPKfrTUo-0-30dc470857fb52f064f0ae7b56662798)
上面的程序非常简单、易于实现,如果之后需要编写非常复杂的代码,那么程序将变得十分复杂、难以理解,此时要如何编写呢?
使用注释就可以给程序添加解释并补充其他信息,让复杂的地方便于理解。在Python中,可以使用哈希字符(#)将注释添加在语句上方或末尾处。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_3.jpg?sign=1738897996-h9H88cWR3iXDee6T2AVCrq6lU3B3FICU-0-d90e6ceb55a40aa538f11451bb022122)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_1.jpg?sign=1738897996-fl4bcWsny54IhYKESf55DHO9kaWRTsqA-0-f69ea8bf167b24d3411ee43b584c5a74)
在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=1738897996-iTIw2cczXhH13CHl48SI9F3f32noC3WU-0-b2b27b1974d3f23679da0daa609982a8)
例如,声明一个数值型变量Shuz。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_3.jpg?sign=1738897996-AdKyt9giXV4DyCNYC1pCJ5Jv1ladLcAx-0-e7c07b78b72aad9d88ffc134b8e43f1e)
#创建一个变量Shuz,给它赋值为9999
变量的类型可以随时变更,也可以重新为变量Shuz赋值。同时,允许多个变量指向同一个值,如num1=num2=100,此时的变量num1和num2具有相同的内存地址,可以使用Python的内置函数id()返回变量所指的内存地址。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_4.jpg?sign=1738897996-edWfvT01R2qgSqsKNQPMIUAmwgtupIcA-0-ca1ab90e5fd412ad0f67c32a6d0359db)
结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_1.jpg?sign=1738897996-XqMZnegt0F0JZFx5NySWHs70GAfpwbE6-0-175dfe2cda809466578672580dbd43d8)
在Python中,最常用的运算符是赋值运算符“=”。此外,Python还提供了复合赋值运算符,如表2-1所示。
表2-1 复合赋值运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_2.jpg?sign=1738897996-bpjixHWbNgZ37Zt06Z4BHHZUEidXCe0S-0-b86302effca82b6ca0bff2fcf810308a)
使用方式举例如下。
● 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=1738897996-1MJVmbRoY9RxRV1Os2BENzxItRPlExSc-0-0bc233429489097af6f069096a48e01b)
算术运算符与数学运算一样,遵循运算的优先顺序,即先幂后乘除,最后加减。若优先级相同,则按照从左到右的顺序执行。另外,在Python运算中,不存在大括号与中括号,只有圆括号(),且圆括号内的运算优先执行。例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_2.jpg?sign=1738897996-Gmdr7DyVpo81Xq7ejv7z4665xSQRe5oh-0-5cdb54af08933ce049482be5c094d219)
读者在计算上述列式后如果得出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=1738897996-iQKRxC7t971QuhwahuSXiy5DkQ4JGBWa-0-b3b6d8a6213b96933550950c2e7b9696)
通过以下示例对拼接字符串的运算符进行简要说明。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_4.jpg?sign=1738897996-gmlafhd7TatlL9w28TZrBE7qXpGSIB1P-0-fd92d6c5803ca3803b650fc97547190e)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_1.jpg?sign=1738897996-lVw0rOjaaVIdM4KbMEbeYNCitRUowzMs-0-b8bf65113bb2e8b684face60307da13c)
运行代码后,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_2.jpg?sign=1738897996-2ikGThprzB53F5RWQmcKMJK4pBGHJiua-0-83e4ccbd181d19c32c600cfbad6abbf0)
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=1738897996-i3jkOLZeKNqB4d1IqGDXmd3UojwzL9NS-0-9ef0f047029897e00fac9d9b9a1ee3c6)
这时,请思考以下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=1738897996-plTXQztbEsHh5SMB8LB1VyziVbb8DMdt-0-cef32d259e1169792ea570ace3a8ebfa)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_1.jpg?sign=1738897996-5EQNZEjJozqhVEQrVGDYsK81SLEv38hV-0-8c66451292c1f0fd16ef00c5255b9809)
计算机在判断后,将给出答案True或False。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_2.jpg?sign=1738897996-hES1oqT4eh7wZoZxONUlC4UuKPiujXyH-0-512e4bc7aac209fe3896732b1daf615f)
初学者应注意的是,赋值运算符“=”和比较运算符“==”存在本质区别!布尔表达式比较复杂(复合布尔表达式),使用逻辑运算符相连。那么,逻辑运算符又有哪些呢?如表2-5所示。
表2-5 逻辑运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_3.jpg?sign=1738897996-QWTubGbZPSEdc6j57cB0TgjnhgQKzt8r-0-cf8964df068ca8dc373f2417540c299a)
以下为逻辑运算符的演示代码,读者可以先自行对这3个复合布尔表达式进行判断。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_4.jpg?sign=1738897996-yqdoCljCtoc2MYHbv6veCvGkL5nmmj1m-0-3b8325b412acbc49d736b5732a00b623)
计算机输出的结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_5.jpg?sign=1738897996-wm4xilApl2H7NGVnsA4qRQNj1dGvWuRo-0-ca03fb9a7877c51958430f1d4826795c)
如果自我判断的结果与计算机输出的结果相同,说明已基本掌握了逻辑运算符的相关知识。另外,运算符是有顺序的,其优先级顺序如表2-6所示。
表2-6 运算符的优先级顺序
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_39_1.jpg?sign=1738897996-KNEPwKTJBNk4Jgx9ndG79bSJxbWAGYCh-0-1650a6c44e828ef352f1b3fd18c6a989)
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=1738897996-7ZEC02KpD8dz2zEFwefLKjg2KM4DDhco-0-eb633a93fc88b5dcfabf6121dae210c9)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_1.jpg?sign=1738897996-4tQJKmebxPuBWOMBF4xQ8jwyW1Ph5Tzn-0-b78ee3e9b2bb798ecc25846eb4813cc7)
读者可自行编写代码,对比自己的运行结果是否与下方运行结果相同。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_2.jpg?sign=1738897996-3f4BgePxq4JldaewIzYHuPFKNBnWTWtc-0-8629aa6cab6d40d6d354e9f68ea4d3fa)
接下来介绍求和函数fsum(),此函数不同于前4个函数,使用时需要导入math库。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_3.jpg?sign=1738897996-3oIfcKfJa5Jqk0LEtGrljp9OiHFnPywr-0-68a7a2c0bd36b3fbbaf7db1d692b111c)
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=1738897996-dou3O432CNgBrmEFuDFozwgD4twFjP2q-0-032ad51d2cdc3dbd0a507e64ea05e66c)
代码运行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_2.jpg?sign=1738897996-LzQQXd9hPMX33igEmy3hcpEJb5dZHfrg-0-2d90300c4decaf5bcfbedb4a4039fee7)
可以看到,print(a[7])(正向索引的第7位)所对应的位置显示出来就是1个空格。
另一种常用的字符串操作是切片(Slice),即从字符串序列中选取相应的元素组成一个新的字符串序列。切片使用的语法为:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_3.jpg?sign=1738897996-zHzrIL1dR0zhOksRMsnKYFrZDHB22ICu-0-cace11e884fe35b36f85c3ff76c78cb8)
● 开始索引就是切片切下的位置,0代表第一个元素,1代表第二个元素,-1代表最后一个元素。
● 结束索引就是切片终止索引(但不包含终止点)。
● 步长是指在每次获取完当前元素后,切片移动的方向和偏移量,默认为1。当步长为正整数时,取正向切片;当步长为负整数时,取反向切片。
请注意,索引元素和切片元素都必须使用方括号[]。
读者可以通过如下代码自行尝试。需要说明的是,切片是在序列中选取某个范围内的元素的机制,列表和元组也可以进行切片。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_4.jpg?sign=1738897996-5tLwqqyPGVAsAjQ0pjIiOqcJzXWls2kg-0-4d9a63337ff2040abe69edadd07bb004)
关于字符串操作,还有如下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=1738897996-6DAl9iUEkamGNLQnE2ooYWOHUecqKYfl-0-804d872f89c17473a60592f781c1a323)
在列表a1中保存了6个数字,我们使用2.1.3节所提到的字符串的索引方式更改第一个元素的值,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_42_2.jpg?sign=1738897996-euJMTEVU0B7LQCy9S9OjIsNM62abBINM-0-66487503d99b7fcfabca6cbbf4f6a69f)
可以看出,第一个元素已经被更改了,列表的索引也是从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=1738897996-oyKpaYd3kdS4FB9qNDkhCmqAs1gs0eqK-0-f3e294ed20391044818c46eda088e411)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_1.jpg?sign=1738897996-6I4GxkZjJAvdaHWK8bGIzSajdGyZmqn5-0-d99fe5860cbd6acfdd18343f9a7eaae5)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_2.jpg?sign=1738897996-EGtR62zmKv7lMw7fOniJgGj5eMfnzT9q-0-f734a4f985b2368cfdb3574344919689)
(3)创建空列表,使用append()方法添加元素。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_3.jpg?sign=1738897996-TIYTrOsH1pHrg3Tlb5U8RZRyn9aRvQf1-0-46375a387f1994a698330841b46fa100)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_4.jpg?sign=1738897996-ZozYzZgzf8dYB1iNwv2cX9uVDDSpVvx2-0-4fa5d1ae1fcd1bf92c0d5b2dcf889e9d)
这3种创建列表的方法在未来的操作中将会起到非常重要的作用。
接下来介绍del语句,其可用于删除列表中指定位置的元素,例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_5.jpg?sign=1738897996-2VLjAAi4hOHfsn2cWXGX3dd1X6cX6Ru1-0-19358613d9e23768963c4b83b94f3691)
读者输入代码并执行后会发现,元素30已被删除。
2.元组
元组(Tuple)是不可变序列,元组中的元素不能修改,这是它与列表的不同之处。
元组没有能够增加、修改、删除元素的方法。如果想要创建一个元组,必须将使用逗号分隔的元素放入圆括号中。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_6.jpg?sign=1738897996-x5sXPjfxHUpUP7JVf4JzeG2wV52Pf4ps-0-4099dcbdcd4a2f77b01b22c64460aae2)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_7.jpg?sign=1738897996-8xb9reETPnqhD0hzNZJZTGzyfRNaX1lM-0-4350d4b8b00c4326b9d4ac89e2105300)
函数list()可以接收字符串、元组等其他序列、迭代器等生成列表。函数tuple()可以接收字符串、列表等其他序列、迭代器等生成元组。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_8.jpg?sign=1738897996-VLZUCUVfb89Yi2kdxBZwvH7DUduA4TY9-0-7d98883a2d812e86b637864fd10060ca)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_1.jpg?sign=1738897996-luETtdFusu6448NnnfIJ5lyWqzLmFNdB-0-935103febe48231ee8864177c3a3cc58)
函数range()返回可迭代对象,函数list()和函数tuple()是对象迭代器,可以把函数range()返回的可迭代对象分别转化为一个列表和一个元组,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_2.jpg?sign=1738897996-Y5hIgLJnvEFGEKTuf2nUxeeuYHpSsCS2-0-1259615671e025602372987b8c91abbb)
3.字典
字典(Dict)用于存放具有映射关系的数据。
字典相当于保存了两组数据,其中一组是关键数据,被称为键(Key);另一组数据可通过键来访问,被称为值(Value)。例如,姓名:小明,民族:汉族。作为键的数据和作为值的数据是互相关联的。字典其实是“键值对”的无序可变序列,在字典中,每个元素都是一个“键值对”,可以通过键快速获取、删除、更新对应的值。键是任意的不可变数据,并且不可重复,而值可以是任意且可重复的数据。
使用大括号建立字典,并且根据键访问字典中的元素,同时为字典中某个元素重新赋值。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_3.jpg?sign=1738897996-HzdM9jk4ghmFThOGir7ikts9K0Gli0lR-0-a5f90cf5e901ce18f1da397062c1e45d)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_4.jpg?sign=1738897996-iFTjTIWfVhOSsyLLq1zc5x2EgQNMNu6H-0-9144db8a1d1fb455e5122ec09eb1ce71)
这里补充说明一点,在字典中,可以使用键访问值和修改值。
创建字典的方法有3种:①直接使用函数dict()创建;②先使用函数dict()创建空字典,然后利用映射函数zip()构造字典;③先使用函数dict()创建空字典,然后利用可迭代对象构造字典,具体如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_5.jpg?sign=1738897996-yGzDX56oYtvQrOwOIah4q1wZaaVPcL3D-0-ffa026e2a46e0a3fc47b3aa1e16a65fc)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_1.jpg?sign=1738897996-u5nCyZTjjMW3DIYfat8DV6BZJlrVIjPw-0-e1d9d04df30e16b528e11dd116d01098)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_2.jpg?sign=1738897996-BiZTyEuGrlxwgPV4oTGN27Hy2Xgju5Kr-0-a9ebb1a271a3078d3692443dc887066a)
受篇幅所限,列表、元组、字典的内容无法全面展开,感兴趣的读者可搜索相关资料自行扩展学习。
2.1.5 顺序结构
目前为止,读者看到的代码都是按照它们出现在程序中的顺序执行的,这种程序结构叫作顺序结构。顺序结构是流程控制中最简单的一种结构,也是最基本的一种结构,如图2-3所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_3.jpg?sign=1738897996-D5JPVdLLwwXkb8Py2hS4DOwAtBIf59tj-0-32213470b13122c5e65cb5f12b456775)
图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=1738897996-s1gxsbayWsLVFJNntqbNX9AtlDfsJT0M-0-d902659ee360709ed1e7c09b32ed833d)
图2-4 单分支结构
单分支结构只执行True路径上的语句块,False路径上没有语句块,示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_2.jpg?sign=1738897996-6gyrlDTpW5xbc617nc43UfTlzzHC8Skh-0-3986302a6577fc6a881614da2af84b11)
如果输入input('您的年龄:39'),则代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_3.jpg?sign=1738897996-kNKWDPKLp7QV5PLzbKIN6aRb4ZkkhQht-0-3443631d6293d8a8947d78d8c4cea6a1)
如果输入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=1738897996-n58v48WHKkt0fBpFyz4nbWo1PSBizR3h-0-11324987444d5036ba6392f80643862b)
当输入input('您的年龄:30')时,执行else分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_1.jpg?sign=1738897996-6H4aWtNr6CI1qHZvI7p9LqeN2sRdElhG-0-38ce37b93b8e2936dfdfca04ac5a61cf)
图2-5 双分支结构
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_2.jpg?sign=1738897996-4GlEs5QeXxxMWB2a5TGX9rGNUvmI3rdf-0-a57841ed0b82503f1555a59230fa57e7)
当输入input('您的年龄:50')时,执行if分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_3.jpg?sign=1738897996-n6uy0Wba8Mbi0qBbZbmWbF9oBWYNVoJf-0-90221bc545cdbde14fbf715f5bbb146e)
3.多分支结构
多分支结构扩展了可以选择的路径,其结构如图2-6所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_4.jpg?sign=1738897996-c07A6nsMB2NWnNkRMf4l6ySKkHluypof-0-0010f023e57c18633a5f30505cc5ef8f)
图2-6 多分支结构
多分支结构的示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_1.jpg?sign=1738897996-7dhMwa8VJk3FtIqWSEY4KzEcaXhmXNf5-0-517e9c71e4c0f9261aa252743b82493f)
读者可以输入上述多分支结构代码,然后输入数字自行尝试,此处不再赘述。
2.1.7 循环结构
循环结构是指在一定条件下反复执行某段程序的流程结构,被反复执行的程序则被称为循环体,能否继续重复执行将由循环的终止条件来判定。Python中的2种基本循环结构如下。
1.while循环
while循环的特点是,当满足条件时进入循环,在进入循环后,若不满足条件,则跳出循环,其结构如图2-7所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_2.jpg?sign=1738897996-cIaOGQ3KC1DebOFp7qmp1VAYis3S05bU-0-dd58398550b751fac4c13a25a49a63e9)
图2-7 while循环结构
while循环是一种条件循环,只要循环条件给出的判断结果为True,循环就会一直持续,示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_1.jpg?sign=1738897996-8tJIv7yfMY4V7UZcG2M0svpi4Sdy7zwG-0-e585adbd6e4538c75a15810728dd8197)
执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_2.jpg?sign=1738897996-igbJi6McqLZudD1j8t0gvAnAfYUnnLBm-0-4df759653cae97b664f840709331c742)
可以看到,当循环条件不被满足后,才跳出循环,执行后面的语句。另外,使用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=1738897996-ZrWcI8WooswX7Y0Vt1kIOfkLlAoscWKq-0-788995127af4313f10ec6df9816cf54b)
2.for循环
for循环则是一种既能遍历列表又能遍历字符串的循环。使用for循环改写while循环中的2个示例,改写后的示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_4.jpg?sign=1738897996-koWvj9Huk1yBLEa0splaj7Rm6JzfmXKb-0-ad6c4a3935ed356fdf4c5e6a7075d52a)
改写后的示例2代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_5.jpg?sign=1738897996-i46470wHhWR8FYk61dQ0YO7idz5dNhz1-0-24350577486a050c5486000001c9f2a8)
这里简单扩展下,对于示例2的经典求和问题,还有一种更“Python”、更简洁的代码写法。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_50_1.jpg?sign=1738897996-iNMBscFG1ONOgdYCCrCP92wokmA5Pxbg-0-0a21e35a0f4a570f644629f7fbfdccbd)