![人工智能数据素养](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=1739012688-0I4cA9DEbqLVtvNWd0JqD23OX9u3UWaG-0-5027f063d22988511f7a7387d1b02795)
图2-1 Python的安装界面
安装路径可以选择默认位置,也可以自定义位置,如图2-2所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_32_2.jpg?sign=1739012688-OuRQMG1gHIXaWzX7mXLjdxVYCWDUmY4m-0-b83a94d968646fd94503664b5cdf97cf)
图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=1739012688-yUjMSvPFZsWGiuexCNFUYOHbmLPQLjeL-0-2e2df84094ac86dfce8a6584ba44f6e8)
保存后按键盘上的F5键,屏幕将显示如下结果。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_2.jpg?sign=1739012688-xhsqHecQS2NkW385TGLi8OMsQ4OrwFqw-0-1bbfe91c9c76093b15a6e8ceb71b6fb2)
上面的程序非常简单、易于实现,如果之后需要编写非常复杂的代码,那么程序将变得十分复杂、难以理解,此时要如何编写呢?
使用注释就可以给程序添加解释并补充其他信息,让复杂的地方便于理解。在Python中,可以使用哈希字符(#)将注释添加在语句上方或末尾处。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_33_3.jpg?sign=1739012688-sXpuz5hK93bMmjs9RUJUY6b66deMDt9U-0-ec72d536a0326ad0d9013b2d6bb63f3e)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_1.jpg?sign=1739012688-nldxLjvhIxzK9tAfLGUM8V4zCkUCgu6Y-0-4f371ca367551ce1c6b53b0439621ad3)
在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=1739012688-XQMGeZWuINosRcZO1gHGjH6c5hpvQZnn-0-6f873ea026089154f58593f574f59c10)
例如,声明一个数值型变量Shuz。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_3.jpg?sign=1739012688-6qGiVPz4DjwOtpXItU3moZ2mNhfFDDUg-0-fca40b37eb34de46326ff900e53d79e8)
#创建一个变量Shuz,给它赋值为9999
变量的类型可以随时变更,也可以重新为变量Shuz赋值。同时,允许多个变量指向同一个值,如num1=num2=100,此时的变量num1和num2具有相同的内存地址,可以使用Python的内置函数id()返回变量所指的内存地址。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_34_4.jpg?sign=1739012688-EmIY1WAZLKuSM8FfjZF3fyoN6B0vQ1Dm-0-6c6c99e39f3ef5e4b46b9e6bc361b3c5)
结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_1.jpg?sign=1739012688-2QwrGcnLwpzngtcWfQrvy1BUxYyDWwbe-0-55685a5306c6de70c7f90894fe7a4704)
在Python中,最常用的运算符是赋值运算符“=”。此外,Python还提供了复合赋值运算符,如表2-1所示。
表2-1 复合赋值运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_35_2.jpg?sign=1739012688-yJa2KMy2R6dtof9umoHnzNNniQUq3nzo-0-c182c3dae8ad58cc394d3c47406b40dc)
使用方式举例如下。
● 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=1739012688-1jisqy6I0U3eQoxv045wUJQy0CCR9x2c-0-20b6bd8b31baebefb9ef19ab2250e438)
算术运算符与数学运算一样,遵循运算的优先顺序,即先幂后乘除,最后加减。若优先级相同,则按照从左到右的顺序执行。另外,在Python运算中,不存在大括号与中括号,只有圆括号(),且圆括号内的运算优先执行。例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_2.jpg?sign=1739012688-rTRRN0G77sJ4mu5Mh8CGcowyi9XAsZHf-0-e342d2ef41c96708e7854c092f873270)
读者在计算上述列式后如果得出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=1739012688-C8uAtD1C8F0Q6AhUpzJBx8q3PEvO2jCe-0-054a0199e26acea1e2b7ab598f4cedbe)
通过以下示例对拼接字符串的运算符进行简要说明。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_36_4.jpg?sign=1739012688-R8YCB9ewBHqp7UWdph4czBM4LbsbO0tP-0-0d1dee3f817f7b768a71fdd606fc0eb9)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_1.jpg?sign=1739012688-kZAHJWw7xM0yWpzcY9Mw3cJc3jfy6CoQ-0-ae2e130f6c3b3993bc6604637368fca2)
运行代码后,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_37_2.jpg?sign=1739012688-EBFZjVg0KxZQzpcyn5HICodR7Wwu3CH2-0-5e01bce574e049db818a0adde206d482)
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=1739012688-xq95geikN2tNCNAcYMoBprzGXEjb2pln-0-eba5712e1542cb5b40344d95e409d8b0)
这时,请思考以下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=1739012688-5wwSjkAFgfFHc0vlIMZ7r3NYMUB6GwXK-0-506d8bd0133e09d7288943a95f7fa373)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_1.jpg?sign=1739012688-V6pEAXE7mLK8x98wKjjcMUFaDWaU2JSM-0-afca2e5b822398cefe3c4dae7605206d)
计算机在判断后,将给出答案True或False。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_2.jpg?sign=1739012688-tBOtQZ56xhSjLPSUERBqgRGTZ7iyDB1N-0-774ad46d56f9fb8f25ed69e0ca230302)
初学者应注意的是,赋值运算符“=”和比较运算符“==”存在本质区别!布尔表达式比较复杂(复合布尔表达式),使用逻辑运算符相连。那么,逻辑运算符又有哪些呢?如表2-5所示。
表2-5 逻辑运算符
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_3.jpg?sign=1739012688-Eyytbolr2W0UFqtTo7nNSygkt8Bg3qLS-0-d0e5769bd58493e7800576d7c0f20689)
以下为逻辑运算符的演示代码,读者可以先自行对这3个复合布尔表达式进行判断。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_4.jpg?sign=1739012688-cP7R9daevcPm0ymfKotmdGjDNbplrOKz-0-a3012695e639bdad74726bb6db609d61)
计算机输出的结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_38_5.jpg?sign=1739012688-dTek3GTh2GVXBWIq4h4GqLC7rzp8hlaW-0-16ca29a0f13f2ad70e446f0d4d9d79f8)
如果自我判断的结果与计算机输出的结果相同,说明已基本掌握了逻辑运算符的相关知识。另外,运算符是有顺序的,其优先级顺序如表2-6所示。
表2-6 运算符的优先级顺序
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_39_1.jpg?sign=1739012688-8aLXOAvdEs6RmF4x4OaY7UrnsBElNA9V-0-0fbbda6e777066d3ba8f94979822704b)
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=1739012688-On6Y9YmboHCeNuHzClDKYmXVxqFAchd7-0-5305768ce8ce48b3bec9f4a81cbd586d)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_1.jpg?sign=1739012688-Yk7SgzDtzZDJjFajlLBdSRPBE1oO6GuA-0-c33d60d3c6d2414b2aa5de5880ea384c)
读者可自行编写代码,对比自己的运行结果是否与下方运行结果相同。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_2.jpg?sign=1739012688-qBcyPwkmd5iryp2XX6J0xAFvtCXaRI5g-0-12f44fb27644331ab8d3a7fa26b759fe)
接下来介绍求和函数fsum(),此函数不同于前4个函数,使用时需要导入math库。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_40_3.jpg?sign=1739012688-xELA41M3oWg5paWfn0wcqvRo9YJsw18G-0-09ebc1cd25f927a2bfe12801c05d061f)
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=1739012688-Z7rsua5rpyKBcLKcRHHrI02CKdkmQ7EB-0-a9211f839a13a355df99816a462051bd)
代码运行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_2.jpg?sign=1739012688-tpAQ6o7XPSTP4AIX1wR3TWCKRF3SbND6-0-744f6548d90083c226d754f2523ba5d5)
可以看到,print(a[7])(正向索引的第7位)所对应的位置显示出来就是1个空格。
另一种常用的字符串操作是切片(Slice),即从字符串序列中选取相应的元素组成一个新的字符串序列。切片使用的语法为:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_3.jpg?sign=1739012688-ZNhZy3oj5BASA25GV98Okh1e7nRXGIf1-0-b205cdff346c4e3e75bba64dba414b4e)
● 开始索引就是切片切下的位置,0代表第一个元素,1代表第二个元素,-1代表最后一个元素。
● 结束索引就是切片终止索引(但不包含终止点)。
● 步长是指在每次获取完当前元素后,切片移动的方向和偏移量,默认为1。当步长为正整数时,取正向切片;当步长为负整数时,取反向切片。
请注意,索引元素和切片元素都必须使用方括号[]。
读者可以通过如下代码自行尝试。需要说明的是,切片是在序列中选取某个范围内的元素的机制,列表和元组也可以进行切片。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_41_4.jpg?sign=1739012688-acr3pDNRsHELBREM4qj0E6a6Dd9ePQUj-0-b50f755aa401f519feeaeceffbf0bb0f)
关于字符串操作,还有如下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=1739012688-0IjZdewiiTvFQ80VbDIkf6vTMhbOS23o-0-98a7d4095fc3c9cefcad07127fea66f1)
在列表a1中保存了6个数字,我们使用2.1.3节所提到的字符串的索引方式更改第一个元素的值,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_42_2.jpg?sign=1739012688-aQpoDG3x6IjzWSqWGu0s4blAKHdu4Yzh-0-c7df9274f57adbcb29165ec387669d91)
可以看出,第一个元素已经被更改了,列表的索引也是从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=1739012688-ANeHdQ5i2rjzAajzcSSeLujiF9g6Y4dv-0-386b9de4e3c7653d26373a59baa1b54b)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_1.jpg?sign=1739012688-sw79EElfFrIMvs5A0YoV4vS3ZxlgWXY7-0-57cd359d207a8e010682f86610633f5b)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_2.jpg?sign=1739012688-SRb0G9PaidxY9a43Hc6JCcabBOu5Yy0a-0-62f095b75cec35d03fe83b8f386d4505)
(3)创建空列表,使用append()方法添加元素。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_3.jpg?sign=1739012688-npCPrNSztqsMSGZXE82spWrEJlRhsJpy-0-de14336bece55e9befe44168398ccf66)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_4.jpg?sign=1739012688-8OCss6UCV43925FdUPWQvBwfZhoDWrSM-0-57eff2ded8c8e50fda2ff6935a48e904)
这3种创建列表的方法在未来的操作中将会起到非常重要的作用。
接下来介绍del语句,其可用于删除列表中指定位置的元素,例如:
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_5.jpg?sign=1739012688-CaGUy9wCDfm1G8q3wiml8swBrzYws6YI-0-dfa95e72507d65fe1509c436dad45593)
读者输入代码并执行后会发现,元素30已被删除。
2.元组
元组(Tuple)是不可变序列,元组中的元素不能修改,这是它与列表的不同之处。
元组没有能够增加、修改、删除元素的方法。如果想要创建一个元组,必须将使用逗号分隔的元素放入圆括号中。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_6.jpg?sign=1739012688-okKXpk4SOMykLYHfhMZzSAAazZ9S333i-0-e9d95642c4c18d32833615ad51d42bf1)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_7.jpg?sign=1739012688-cZTcXKXHW2CBOSLi8RR9gBxe64igrYJr-0-75e12a856ac0193ca8de87ffaf3343bf)
函数list()可以接收字符串、元组等其他序列、迭代器等生成列表。函数tuple()可以接收字符串、列表等其他序列、迭代器等生成元组。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_43_8.jpg?sign=1739012688-DjUJs9xyxiyyrlKegDiyUSq1cUEIz3Nl-0-13a3d2727e7ba205ab2730cc5a105af4)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_1.jpg?sign=1739012688-hm6SrhdF5zl2FrhbUDK67as1vi2Dlp0I-0-1c1dd42dc73ca039e985f1242ce5c36b)
函数range()返回可迭代对象,函数list()和函数tuple()是对象迭代器,可以把函数range()返回的可迭代对象分别转化为一个列表和一个元组,代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_2.jpg?sign=1739012688-i11khsrAu8dKcJE7bR1s44gXnkDBVzs0-0-4e50b14bd01e41727e99611556cd1eab)
3.字典
字典(Dict)用于存放具有映射关系的数据。
字典相当于保存了两组数据,其中一组是关键数据,被称为键(Key);另一组数据可通过键来访问,被称为值(Value)。例如,姓名:小明,民族:汉族。作为键的数据和作为值的数据是互相关联的。字典其实是“键值对”的无序可变序列,在字典中,每个元素都是一个“键值对”,可以通过键快速获取、删除、更新对应的值。键是任意的不可变数据,并且不可重复,而值可以是任意且可重复的数据。
使用大括号建立字典,并且根据键访问字典中的元素,同时为字典中某个元素重新赋值。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_3.jpg?sign=1739012688-jY23pu1WLvoJiAdomFKyybmtHNQK4W9l-0-8c779c5bef50f5fa47293d83a42ec4c7)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_4.jpg?sign=1739012688-0BooFSQ7r1OWLKAD0qfUCsinKDawxQri-0-d401c238ff881279831db97e3a8763c1)
这里补充说明一点,在字典中,可以使用键访问值和修改值。
创建字典的方法有3种:①直接使用函数dict()创建;②先使用函数dict()创建空字典,然后利用映射函数zip()构造字典;③先使用函数dict()创建空字典,然后利用可迭代对象构造字典,具体如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_44_5.jpg?sign=1739012688-TWYHSxoDFljr1HXiuy1w8lDth3qOKYIb-0-9355a8241349e2cfb836a6601af0645e)
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_1.jpg?sign=1739012688-I4sRRUf65fkYGq59ZlCcu2SRQlIYVerH-0-ce23aa0ac67e16bf8dbf27d897467d56)
代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_2.jpg?sign=1739012688-8McI7YS5LGYWxdJOqQ7KjckGLPTZQArH-0-b82da6b8383dfed927aa202527578fc6)
受篇幅所限,列表、元组、字典的内容无法全面展开,感兴趣的读者可搜索相关资料自行扩展学习。
2.1.5 顺序结构
目前为止,读者看到的代码都是按照它们出现在程序中的顺序执行的,这种程序结构叫作顺序结构。顺序结构是流程控制中最简单的一种结构,也是最基本的一种结构,如图2-3所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_45_3.jpg?sign=1739012688-3vcqLa3tqVWYa2YOFXSWaeVMxi5ru5Ap-0-26c3e18ada2f443d564b609f57e488eb)
图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=1739012688-Vyhp2OxjZt432E4SiBSwUza21HdiQC0P-0-2aa9ebdf946588780e48240c9d1c48be)
图2-4 单分支结构
单分支结构只执行True路径上的语句块,False路径上没有语句块,示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_2.jpg?sign=1739012688-QgU1DBTUv47odRCvIDcbxOceHgCpAsA6-0-71a39860d47ab9a9ffa2cca1dd05ad28)
如果输入input('您的年龄:39'),则代码执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_46_3.jpg?sign=1739012688-4084jRIXgGF1JvV2fc6sjvDaLd1vj45H-0-7022e422fd41d4d9e741df1697c8695e)
如果输入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=1739012688-6QcApnrP9uylK7MrCmSgiPzfT0w0vqhU-0-59180b4c074317e67f6f9fd0a7b5a5fc)
当输入input('您的年龄:30')时,执行else分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_1.jpg?sign=1739012688-K9iKsM1rwFHghCi2EDsAO8Hc2yZL6Nz5-0-9bb1115a9e83d7149e7801a48cd00677)
图2-5 双分支结构
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_2.jpg?sign=1739012688-AnlhIiYXTXnHsfS0bcJ9ThLmWZDreebg-0-9c5046b78f1802c20595a722898cd19b)
当输入input('您的年龄:50')时,执行if分支,输出结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_3.jpg?sign=1739012688-omZl4C7WoWhTqYA8OqxNK7rMayGVy5qR-0-ae869b055d9f288adcf7a79e4d5245d5)
3.多分支结构
多分支结构扩展了可以选择的路径,其结构如图2-6所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_47_4.jpg?sign=1739012688-R6FBKnIhjPkrLeAiyqkxXhcUQxoU5Ifc-0-664f1470c8ac50ecdc21fc599ca34565)
图2-6 多分支结构
多分支结构的示例代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_1.jpg?sign=1739012688-QzWN96olxqX94XEuqA0QtJFA1yHemaQX-0-9b4cb996ca32d688ec54ca993b2082a1)
读者可以输入上述多分支结构代码,然后输入数字自行尝试,此处不再赘述。
2.1.7 循环结构
循环结构是指在一定条件下反复执行某段程序的流程结构,被反复执行的程序则被称为循环体,能否继续重复执行将由循环的终止条件来判定。Python中的2种基本循环结构如下。
1.while循环
while循环的特点是,当满足条件时进入循环,在进入循环后,若不满足条件,则跳出循环,其结构如图2-7所示。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_48_2.jpg?sign=1739012688-im3iDXIFSpB3nJb76AI6oqGF4qvAXDj9-0-ff1605afca8dd5ee8272406afa376056)
图2-7 while循环结构
while循环是一种条件循环,只要循环条件给出的判断结果为True,循环就会一直持续,示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_1.jpg?sign=1739012688-r9a16TYgVXgN3DUZQ0kjh6i2OhECW7kZ-0-ac1af03ee2a302c9ce47684f9ecb196a)
执行结果如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_2.jpg?sign=1739012688-Y4OUMr5X7K3OY7P6RbkZStRKDLkyBWQd-0-d11578b998587ee6c2ea55dcecb7b479)
可以看到,当循环条件不被满足后,才跳出循环,执行后面的语句。另外,使用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=1739012688-nbGAm7vkZNDSJoK2557T0Z4bUjigBxKW-0-de219c678533129ef74ae8148eef5182)
2.for循环
for循环则是一种既能遍历列表又能遍历字符串的循环。使用for循环改写while循环中的2个示例,改写后的示例1代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_4.jpg?sign=1739012688-IAEUuoBZxOcYyYff98v7ve5D08juJKIW-0-6bcee88be5e721760d895d502f4c7f22)
改写后的示例2代码如下。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_49_5.jpg?sign=1739012688-nxjxQgpt3zzD3OG7MgFFrnyYeWzr5nfl-0-23dd0d94300209f88984d1c5f743d279)
这里简单扩展下,对于示例2的经典求和问题,还有一种更“Python”、更简洁的代码写法。
![](https://epubservercos.yuewen.com/BA6176/28815106307696606/epubprivate/OEBPS/Images/44423_50_1.jpg?sign=1739012688-MFAUnI36vjwktFkM0G7oLYmjWzcBvQga-0-4e2a40135d573484a8f084bd5281a2cc)