《大数据分析:基于Python》 课件全套 余本国 第1-10章 语法基础 -应用案例分析_第1页
《大数据分析:基于Python》 课件全套 余本国 第1-10章 语法基础 -应用案例分析_第2页
《大数据分析:基于Python》 课件全套 余本国 第1-10章 语法基础 -应用案例分析_第3页
《大数据分析:基于Python》 课件全套 余本国 第1-10章 语法基础 -应用案例分析_第4页
《大数据分析:基于Python》 课件全套 余本国 第1-10章 语法基础 -应用案例分析_第5页
已阅读5页,还剩359页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大数据分析:基于Python

第1章Python语法基础

本章知识点导图吉多·范罗苏姆“Python之父”指的是Python的创始人吉多·范罗苏姆(GuidovanRossum)。吉多·范罗苏姆1956年出生于荷兰,并于1982年获得阿姆斯特丹大学数学和计算机科学硕士学位。此后,他先后在多个研究机构工作,包括荷兰阿姆斯特丹的国家数学与计算机科学研究中心(CWI)等。他以创造Python程序设计语言而闻名于世,常被人们称为“Python之父”。2020年,吉多·范罗苏姆加入微软公司。由于Python简洁易懂,扩展性强,受到很多程序员的追捧,他们编写了很多类库,使得它的应用越来越广泛,越来越方便,吸引了很多领域内的人在使用。尤其在近几年,谷歌等大型互联网公司使用Python语言来编写Al程序,在机器学习、神经网络、模式识别、人脸识别、定理证明、大数据等各个领域,都产生了众多可以由Python直接引用的功能模块。当前较流行的深度学习框架大多是用Python编写的,如震惊了国内的AlphaGo,其大部分程序就是Python编写的。随着人工智能的火爆,Python几乎被推上了神坛,获得了“人工智能标配语言"的美誉。Python的发展经历了py2.X和py3.X两个大的版本,稳定的py2.7版本已于2020年正式停止维护,仅保留了商业维护,这也意味着Python2完全成为了历史。一般的软件系统都是后者兼容前者,但是Python在2.7和3.X版本之间却没有做到这一点,甚至相差甚远。当前py3.X已经更新到了py3.12,为了代码的稳定性,本书采用的是稳定版本py3.9及其以上版本。Python除了极少的事情不能做之外,基本上属于全能,如我们常见的系统运维、数据库、可视化、数据分析、机器学习、爬虫、网页开发、图形处理、科学计算、人工智能等等,已经深入到所有的科学领域。Python语言特点“人生苦短,我用Python!”,这就表明Python语言的简单易学,学而即用的特点。1、简单易学Python的设计哲学是优雅、明确、简单。语法简单,注重解决实际问题,而不用关注语言的本身。2、免费开源开放源码。使用者可以自由地发布这款软件的拷贝、不像其他软件有版权使用限制。3、高级解释性语言Python语言是一门高级编程语言,程序员在开发时无需考虑底层细节,易于移植。4、可移植性Python语言可在Linux、Windows、Macintosh甚至Android等平台上运行。5、面向对象Python既支持像C语言一样面向过程的编程,也支持如C++、JAVA语言一样面向对象的编程。6、可扩展性Python提供丰富的API、模块和工具,以便程序员轻松使用C、C++语言来编写扩充模块。7、可嵌入性Python程序可以嵌入到C/C++/Matlab程序,从而向用户提供脚本。8、丰富的库Python标准库庞大。它可以帮助处理各种工作,有许多其他高质量的第三方库。9、规范的代码Python采用强制缩进的方式使得代码具有较好的可读性。Anaconda安装与使用

原生编辑器Windows用户可以访问https://P/download,从网站上下载最新的版本,大小约为27MB左右。由于原生的编辑器在使用第三方库时,需要设置较多的运行环境,费时耗力,尤其对计算机系统设置不熟悉的新手来说,无所适从。于是一些“自动化”的编辑平台应运而生,Anaconda就是这样一款编辑软件。该软件预装了一些常用的库,安装Anaconda后即可使用,真正体现了“注重解决实际问题,而非语言本身”,只是体型庞大了些,约700M上下。做数据分析大多是基于Anaconda下的Spyder或Jupyternotebook编辑器,毕竟Spyder和Jupyternotebook已成为数据分析的标准环境。Anaconda是Python的一个开源发行版本,主要面向科学计算。Anaconda中增加了condainstall命令来安装第三方库,方法跟pip一样。当然在Anaconda的Prompt下也可以使用pipinstall安装第三方工具包。Anaconda官方下载网址为:/download。Anaconda发展更新较快,下载时请拉到页面下方,按照自己机器配置情况,下载适配的版本,下载界面如图1-1所示。若需要下载往期版本可直接到/archive/选择下载(本课程选择的是Anaconda3-2023.09-0-Windows-x86_64.exe)。下载后直接双击安装,可自选安装位置。但请注意,安装路径最好不要有中文字符,防止运行代码时出现一些意想不到的错误。安装完成后,在开始菜单里可以看到如下图所示的目录。Python有很多成熟的编辑器,至于编辑器的好歹优劣,编者认为适合自己的才是最好的。本书将采用Anaconda下的Spyder和JupyterNotebook,偶尔会使用python原生编辑器。一般情况下,个人写代码时用Spyder比较方便,在进行教学或者演讲交流时,用Jupy或许更胜一筹,毕竟它可以在演讲过程中进行代码交互,最后还可以将演讲过程导出保存为html或者pdf格式。安装第三方库Anaconda安装第三方包很简单,只需要在开始菜单Anaconda下选定“AnacondaPrompt”单击即可,在弹出的窗口命令行中输入“condainstallscrapy”即可安装scrapy。但有些时候用condainstall安装一些第三方库时,却被提示PackageNotFoundError,此时可改为pipinstall安装试试。在安装第三方库或者模块时,很可能因为库较大而下载速度又很慢,导致安装不成功,此时可引用镜像来安装,常用的镜像有清华镜像和豆瓣镜像,具体方法如下。清华镜像网址:/simple豆瓣镜像网址:/simple如使用清华镜像安装tensorflow,输入如下命令行。pipinstall-i/simpletensorflow有些包和库还需要自行下载源码安装包后才能安装,不过已有“好事者”收集好了相关的资料,直接到/~gohlke/pythonlibs上下载即可。基本语法Python的语法一般是一句占一行;逻辑层级关系是靠换行后空4个空格来体现的;注释符采用#表示;多行注释采用三引号,包括三单引号(''')或者三双引号(“"")都可以。所谓注释,就是解释、说明此行代码的功能、用途,但不被计算机执行。在写代码的时候,要养成给代码写注释的良好习惯。养成写注释的好习惯不仅给自己带来方便,也给其他人理解代码带来了方便。s="I'manewcomer."#字符串用双引号引起来foriins:print(i,end=';')#该行是for行的二级层次,所以行首空4个空格【例1-1】层级关系及输出。I;';m;;a;;n;e;w;;c;o;m;e;r;.;上面的代码输出如下:注释代码有以下两种方式:(1)在一行中,“#”后的语句表示注释,不被计算机执行,如例1-2中的第1和第9行。(2)如果要进行大段的注释可以使用三个单引号(''')或者双引号(""")将注释内容包裹起来,如例1-2中的第3至5行的内容,被第2行和第6行的双三引号包裹起来了。单引号和双引号在使用上没有本质的差别,但同时使用时要区别对待。【例1-2】代码注释(在spyder下输入代码)#-*-coding:utf-8-*-"""遍历list中的元素CreatedonFriFeb2614:17:372021@author:yubg"""lis=[1,2,3]foriinlis:#半角状态冒号不能少,下一行注意缩进print(i)用缩进来表示分层

代码程序是有结构的,一般有顺序结构、选择结构、循环结构三种类型,所以代码及代码块之间是有逻辑层级关系的。Python的代码及代码块是使用代码缩进4个空格来表示层级,当然也可以使用一个Tab键来替代4个空格,但不要在代码中混合使用Tab键和空格来进行缩进,这会使程序在跨平台时不能正常运行,官方推荐的做法是使用四个空格表示一个层级关系。一般来说行尾遇到“:”就表示下一行缩进的开始.变量的命名变量名的长度不限,但应力求简单易读。变量名的第一个字符必须是英文字母、下划线或中文;其余字符可以是英文字母、数字、下划线或中文。不能使用Python内置的关键字。不能使用特殊字符,如空格、@、%以及$等。变量名对字母大小写敏感,必须区分大小写字母,如“day”和“Day”是不同的两个变量。Python的变量命名一般采用简单、易懂、尽可能短的单词加下划线的形式(也称驼峰命名法),以增加代码的可读性,如student_name、teacher_age等。变量的名称不能是数字开头,也不能用已有的内置的函数名命名,如print、if等关键字,否则会引起系统冲突出错。为了避免出现运行异常,尽可能地少用中文命名。

在Python中关键字(也称保留字)很多,常见的有type、len、id、copy、range、if、for、while、pass、False、class、finally、is、return、None、continue、lambda、try、True、def、from、nonlocal、and、del、global、not、with、as、elif、or、yield、assert、else、import、break、except、in、raise等。在python中,变量还可以用中文来命名,但不建议,如:中国='China'。一般地,标识符以特殊符号开头或结尾的都有其特殊的含义。单下划线开头的变量表示不能直接访问的类的属性,如_name。双下划线开头的变量表示类的私有成员,如__add。双下划线开头和结尾的变量表示是专用标识符,如__init__。020:这个标识符只有数字构成,违反了开头字符不能是数字的法则;3name:这个标识符也是违反了不能以数字开头的约定;a-1:这个标识符中包含不合法的字符(-);id:这个标识符是Python中的关键字,应避免使用;manandwoman:这个标识符包含非法的字符空格。下面的标识符命名都是不正确的:

一般地,Python一条代码语句占一行,在每条语句的结尾处不需要使用分号“;”。但在Python中也可以使用分号,表示将两条简单语句写在一行。分号还有一个作用,使用在一行语句的末尾,表示对本行语句的结果不打印输出。但如果一条语句较长要分几行来写,可以在行末使用反斜杠“\”来进行换行。语句断行上面的代码和下面的代码在输出效果上是一样的。下面的代码中第一行末尾出现的“\”表示此行与下一行是一个代码语句行。所以反斜杠“\”在这里是续行符号,目的是为了人眼的阅读舒适而将代码用“\”分成了两行。a='Beautifulisbetterthanugly.Explicitisbetterthanimplicit.Simpleisbetterthancomplex.'a='Beautifulisbetterthanugly.Explicitisbetterthanimplicit.\Simpleisbetterthancomplex.'

frompandasimportDataFrame#导入模块中的函数,后面细讲frompandasimportSeriesdf=DataFrame({'age':Series([26,85,64]),'name':Series(['Ben','Joh','Jef'])})print(df)

一般地,系统能够自动识别换行,如在一对括号中或三引号之间均可换行。例如下面代码中的第三行较长,若要对其分行,则必须在括号内进行(包括圆括号、方括号和花括号),分行后的第二行一般空四个空格,但是为了代码的美观,一般还是建议分行后的第二行要空一些合适的空格,对齐代码,以清晰地显示出逻辑层次感。所有的计算机语言基本上都有这么一句开篇的代码:print("HelloWorld")。Python当然也不例外。在原生IDLE编辑器提示符>>>下直接输入print("HelloWorld")并回车,观察其效果。如果不出意外,应该输出如下。>>>print("HelloWorld!")HelloWorld!print()的作用print()的作用是在输出窗口中显示一些文本或结果,便于监控和验证数据。print()函数可以带入参数end,如在例1-2中对最后一行代码进行修改,添加参数end=';',发现其输出的1、2、3不再是各占一行,而是用“;”分隔后显示在一行上。In[1]:lis=[1,2,3]

foriinlis:#半角状态冒号不能少,下一行注意缩进

print(i,end=';')

1;2;3;

【例1-3】输出参数设置。例1-1的那段代码也可以写成如下代码来实现。s="I'manewcomer."foriinrange(len(s)):print(s[i],end=';')左边的代码输出跟例1-1代码输出一致。I;';m;;a;;n;e;w;;c;o;m;e;r;.;这里print()函数中end参数表示打印时使用等号后的符号将他们隔开并打印在一行。也可以去掉end参数,试着打印看看效果。在计算机处理程序代码时,大部分都是在做逻辑运算和数学运算,这就涉及到变量和表达式之间的连接符号,这些符号称之为运算符。运算符算术运算符算术运算符是处理四则运算的符号,类似于我们数学中的加减乘除,他们的优先级关系也是先乘除后加减,有括号的先计算括号。具体的计算符号见下表1-1所示。运算符说明实例计算结果+加:两个对象相加1.2+34.2−减:两个对象相减2–11*乘:两个操作数相乘,或返回一个被重复若干次的字符串3*5'a'*315'aaa'/除:两个操作数相除(总是浮点数)4/22.0%取模:返回除法(/)的余数7%21//取整除(地板除):返回商的整数部分7//23**幂:返回x的y次幂,相当于pow(x,y)2**38表1-1数值运算符【例1-4】数值运算。In[1]:6%3#取余Out[1]:0

In[2]:5//2#取商Out[2]:2运算符说明实例计算结果abs(x)返回x的绝对值abs(-2)2int(x)返回x的整数值int(2.7)2float(x)返回x的浮点数float(3)3.0complex(re,im)定义复数complex(1,-2)(1-2j)c.conjugate()返回复数的共轭复数complex(1,-2).conjugate()(1+2j)divmod(x,y)相当于(x//y,x%y)divmod(5,2)(2,1)pow(x,y)返回x的y次方pow(2,3)8表1-2函数运算In[3]:int(2.7)#取整Out[3]:2

In[4]:divmod(7,3)Out[4]:(2,1)

In[5]:pow(2,3)Out[5]:8赋值运算符运算符示例示例说明=x=2把2赋值给x+=x+=2把x加2再赋值给x,即x=x+2−=x−=2把x减2再赋值给x,即x=x−2*=x*=2把x乘以2再赋值给x,即x=x*2/=x/=2把x除以2再赋值给x,即x=x/2%=x%=2把x除以2取模(取余数)再赋值给x,即x=x%2//=x//=2把x除以2取整数再赋值给x,即x=x//2**=x**=2把x取2次幂再赋值给x,即x=x**2表1-3赋值运算符In[1]:i=0

...:i=i+1

...:print(i)1

In[2]:i+=1#此处i值已是1

...:print(i)2【例1-5】赋值运算。逻辑比较运算符逻辑运算符是针对真(True)和假(False)(布尔值)两种情况的运算,其运算结果仍然是一个布尔值。Python中的逻辑运算主要包括逻辑与and、逻辑或or、逻辑非not。运算符说

明示例and逻辑与,左至右:当and两侧均为True时返回True,否则返回False

xandyor逻辑或,左至右:当or两侧有一侧为True则返回True,否则返回False

xorynot逻辑非,右至左:如果右侧为False返回True;否则返回Falsenotx表1-4逻辑运算符运算符说明示例>

大于:如果左操作数大于右操作数,则为Truex>y<

小于:如果左操作数小于右操作数,则为Truex<y==等于:如果两个操作数相等,则为Truex==y!=不等于:如果两个操作数不相等,则为Truex!=y>=大于等于:如果左操作数大于或等于右操作数,则为Truex>=y<=小于等于:如果左操作数小于或等于右操作数,则为Truex<=y对变量或者表达式的结果进行大小比较的运算符,称之为比较运算符或关系运算符。比较运算符如表1-5所示。表1-5比较运算符【例1-6】比较运算。In[1]:5==4or5!=4Out[1]:True5==4表示5和4是相等的,这显然不对,其计算结果为False;5!=4表示5和4是不相等的,计算结果为True,所以False和True之间的or关系是只要有一个为真即真,故结果为True。In[2]:(5==4)or(5!=4)Out[2]:True为了表达式之间的关系更明晰,上面的代码可以写成(5==4)or(5!=4)。成员身份运算符成员身份运算表示的是归属判断的真假。成员运算符表示的是该变量或表达式是否在某个指定的序列中,成员运算符如表1-6所示。而身份运算符是判断和检查两个变量或表达式是否位于存储器的同一部分,身份运算符如表1-7所示。运算符含义示例in如果在指定序列中找到该值或变量,则返回True,否则返回False2inxnotin如果在指定序列中没有找到该值或变量,则返回True,否则返回False2notinx运算符含义示例is如果操作数相同,则为True(引用同一个对象)xisyisnot如果操作数不相同,则为True(引用不同的对象)xisnoty表1-7身份运算符表1-6成员运算符In[1]:s="Iamateacher."

...:t="Iamold."

...:"I"insOut[1]:True

In[2]:tissOut[2]:False【例1-7】成员身份运算。位运算符位运算符是把数值看成二进制数来计算,因此在进行位运算时,需要先进行二进制转换,然后才能进行运算。位运算符如表1-8所示。表1-8位运算符运算符含义示例&按位与(AND):参与运算的两个值的相应位都为1,则该位的结果为1,否则为0x&y|按位或(OR):参与运算的两个值的相应位有一个为1,则该位的结果为1,否则为0x|y~按位翻转/取反(NOT):对数据的每个二进制位取反,即把1变为0,把0变为1~x^按位异或(XOR):当两个对应的二进制位相异时,结果为1x^y>>

按位右移:运算数的各个二进制位全部右移若干位x>>2<<

按位左移:运算数的各个二进制位全部左移若干位,高位丢弃,低位不补0x<<2In[1]:print("12&7的计算结果为:"+str(12&7))12&7的计算结果为:4

In[2]:print("12|7的计算结果为:"+str(12|7))12|7的计算结果为:15

In[3]:print("12^7的计算结果为:"+str(12^7))12^7的计算结果为:11

In[4]:print("~12的计算结果为:"+str(~12))~12的计算结果为:-13

【例1-8】位运算。运算符的优先级是指在表达式运算中哪一部分先计算,哪一部分后计算,类似于数学中的四则运算。同一优先级的运算从左至右执行运算。有括号的,先执行括号内的运算。具体的优先级见表1-9所示。运算符的优先级表1-9运算符的优先级类型说明优先级**幂由

增~、+、-取反、正号、负号*、/、%、//算术运算符+、-算术运算符<<、>>位运算符中的左移、右移&按位与^按位异或|按位或<、<=、>、>=、!=、==比较运算符In[1]:6<5+2**(3-6%2)Out[1]:True【例1-9】运算优先级。大数据分析:基于Python

第2章数据类型常见的数据类型有:数值型:整数类型(int)、浮点数类型(float)和复数型(complex),用于处理数值计算和算术运算。字符串类型(str):用于表示和处理文本和字符序列。列表(list)和元组(tuple):用于存储和操作多个数据元素,例如有序集合。字典(dictionary):用于存储和查找键-值对,常用于构建映射关系。集合(set):用于存储唯一的元素,提供集合操作(如并集、交集等)。布尔类型(bool):用于表示真(True)或假(False)的逻辑值。2.1字符串

像a、4、%、<等单个字母、数字、符号,我们称之为字符型。字符型(str)是一种数据类型。字符型的变量可以存储任何单个的字符,但该字符必须用引号引起来,单引号或者双引号均可,如var='a',表示变量var是一个字符型。

字符串(string)表示由多个字符组成,是一串字符的序列,可以包含任何字符,如字母、数字、符号、空格等等。字符串通常用引号(单引号或双引号)引起来表示,例如“Hello,world!”,所以一个单词、一句话、一首诗或一篇文章等,用引号引起来,它就是字符串。字符串可进行多种操作,如拼接、截取、比较等。字符串中的字符是有顺序的,从左到右按自然数(从0开始)的顺序进行编号,这个顺序号称为索引(index)。如a="python",第一个字母p的编号就是0,所以p的索引就是0,依此类推,字母y的索引是1,最后一个字母n的索引是5。这个索引称为顺序索引。索引也可以从右到左,记为-1,-2,…等等,称为逆序索引。如上a="python"的p字母的索引为-6,字母n的索引为-1。

字符串中的字符可以按照索引号提取或查找,如从a="python"中提取字符y,y的索引号为1或-5,y可用记号"python"[1]表示出来,也可表示为"python"[-5]、a[1]、a[-5]。代码演示如下。In[1]:a="python"...:print(a[1])y

In[2]:a[-5]#可以不用print(),直接运行Out[2]:'y'

In[3]:"python"[1]Out[3]:'y'

In[4]:"python"[-5]Out[4]:'y'所以若想从字符串中截取一个片段,需要索引号向后增加1,我们把这种截取称为切片。格式为变量名或字符串后带中括号[],括号内为起止(start和stop)索引号两个参数,起止索引号间用冒号隔开,In[5]:a[2:5]Out[5]:'tho'切片的格式为:var[start:stop:step]其中:var表示字符串或字符串变量start表示起始位置的索引号stop表示结束位置的索引号,不包含该索引的字符step表示步长,默认步长为1当切片范围从0开始时,start可以省略不写,同样当范围到左后一个字符时,stop也可以省略不写,如var[:3]等同var[0:3],如上例中的b[0:10:2]可以写成b[::2]。当step取负值时,表示逆序。In[9]:b[::2]Out[9]:'13579'

In[10]:a[::-1]#该方法也常用于字符串翻转Out[10]:'nohtyp'字符串是可以相加的,如字符串a和b相加,表示把a和b连接起来。In[11]:a+bOut[11]:'python123456789'字符串也可乘以一个数,表示重复。字符串a*2,表示将a重复2次。In[12]:a*2Out[12]:'pythonpython'

字符串还有很多独有的方法,比如将字符串a中的所有字母大写、首字母大写,甚至可以判断a中的字符是全为数字还是字母等。In[13]:a.upper()#将字符串中字母大写Out[13]:'PYTHON'

In[14]:a.isalpha()#判断字符串中字符是否全为字母,返回逻辑值Out[14]:True

In[15]:a.isdigit()#判断字符串中的字符是否全为数字Out[15]:False

In[16]:a.isalnum()#判断字符串是否由数字和字母组成Out[16]:True

In[17]:a.find("t")#在字符串中查找字符t,返回找到的第一个索引Out[17]:2

In[18]:a.index("t")#在字符串中查找字符t的索引,返回第一个Out[18]:2

In[19]:a.replace("o","e")#将字符串中的字符o替换成eOut[19]:'pythen'字符串的方法较多,常用的如下。str.replace(old,new):将指定的旧字符串替换为新字符串。str.strip():去掉字符串两端的空白字符。str.split():按空格或指定的分隔符将字符串拆分为多个部分,并返回一个列表。str.startswith(prefix):检查字符串是否以指定的前缀开头。str.endswith(suffix):检查字符串是否以指定的后缀结尾。str.upper():将字符串转换为大写形式。str.lower():将字符串转换为小写形式。str.capitalize():将字符串的首字母大写。str.title():将字符串中每个单词的首字母大写。str.isupper():检查字符串是否全是大写字母。str.islower():检查字符串是否全是小写字母。str.join(iterable):使用字符串作为连接符,连接可迭代对象中的元素。str.find(substring):在字符串中查找指定的子字符串,并返回它的起始位置。str.isalpha():检查字符串是否只包含字母字符。str.isdigit():检查字符串是否只包含数字字符。可用函数type()函数来测试变量的类型;测一个字符串的长度(包含有多少个字符)可用函数len()。In[20]:type(a)Out[20]:str

In[21]:len(a)Out[21]:62.2列表

在Python中,列表(List)是一种有序、可变并且允许重复元素的数据类型。列表使用方括号[]表示,每个值之间用逗号分隔,这里的每个值称为元素。如:lsi_1=[1,2,3,4,5]列表中可以包含不同数据类型的元素,如整数、浮点数、字符串,甚至是列表。In[1]:lsi_1=[1,2,3,4,5]

In[2]:lis_2=[1,2.5,"Hello",True,[1,2,3]]

In[3]:lis_2Out[3]:[1,2.5,'Hello',True,[1,2,3]]

列表是可变的,这意味着可以通过索引访问和修改列表中的元素。列表的索引同字符串的索引。In[4]:q=[10,20,30,40,50]...:print(q[0])10

In[5]:print(q[-1])#逆索引访问最后一个元素50

In[6]:q[2]=35#修改列表中索引号为2的元素...:qOut[6]:[10,20,35,40,50]修改列表中的某个元素,就是对这个位置上进行赋值。列表还支持切片操作,可以通过指定起始索引和结束索引来获取子列表:In[7]:lis_1=[1,2,3,4,5]...:print(lis_1[1:4])#输出[2,3,4],获取索引为1到3的子列表[2,3,4]

In[8]:print(lis_1[:3])#输出[1,2,3],从头部获取索引为0到2的子列表[1,2,3]

In[9]:print(lis_1[2:])#输出[3,4,5],从索引为2开始获取到最后的子列表[3,4,5]

列表像字符串一样,也具有许多其他常用的方法,如添加元素list.append()、合并列表list.extend()、计算列表长度len(list)等等。In[10]:q.append("a")#给列表追加元素

In[11]:qOut[11]:[10,20,35,40,50,'a']

In[12]:q.extend(lis_1)#合并两个列表

In[13]:qOut[13]:[10,20,35,40,50,'a',1,2,3,4,5]合并两个列表除了extend()方法,也可以直接使用+法,如q+lis_1。当需要在列表中指定的索引位置插入一个元素时,可使用insert()方法。In[14]:w=[1,2,3,4]...:w.insert(2,"a")#在w中的索引为2的位置上插入元素a

In[15]:wOut[15]:[1,2,'a',3,4]使用del关键字可以删除列表中指定索引位置的元素,或者删除整个列表。In[16]:delw[2]#删除w中的索引为2的是元素

In[17]:wOut[17]:[1,2,3,4]In[18]:w.pop(1)#删除索引号为1的元素,并会返回被删除的元素Out[18]:2

In[19]:wOut[19]:[1,3,4]

In[20]:w.pop()#默认删除列表中最后一个元素Out[20]:4

In[21]:wOut[21]:[1,3]pop()方法用于删除指定索引位置的元素,并返回被删除的元素,默认删除最后一个元素。In[22]:delw#删除整个列表

In[23]:w#列表已经被删除,所以会抛出变量不存在错误Traceback(mostrecentcalllast):

CellIn[36],line1w

NameError:name'w'isnotdefined

列表删除元素也可以使用remove()方法,remove()方法用于按照给定的元素进行删除,删除的是列表中的第一个匹配项(从左到右)。In[24]:r=[10,"a",35,40,50,'a',1,2,3,4,5]

In[25]:r.remove("a")#删除元素a,从左到右第一个

In[26]:rOut[26]:[10,35,40,50,'a',1,2,3,4,5]

In[27]:delr[3:5]#删除列表中的一个切片

In[28]:rOut[28]:[10,35,40,1,2,3,4,5]

列表还有一些其他的函数和方法,如测列表的长度(包含元素的个数)、最大值、最小值、排序、索引查询等In[29]:len(r)Out[29]:8

In[30]:sorted(r)#利用函数排序,默认为升序Out[30]:[1,2,3,4,5,10,35,40]

In[31]:r#利用sorted()排序不改变原函数Out[31]:[10,35,40,1,2,3,4,5]

In[32]:sorted(r,reverse=True)#添加参数reverse=False可逆序Out[32]:[40,35,10,5,4,3,2,1]

In[33]:r.sort()#利用方法排序,默认升序,原列表被改变In[34]:rOut[34]:[1,2,3,4,5,10,35,40]

In[35]:r.sort(reverse=True)#添加参数reverse=True可逆序

In[36]:rOut[36]:[40,35,10,5,4,3,2,1]

In[37]:r.reverse()#对列表逆序

In[38]:rOut[38]:[1,2,3,4,5,10,35,40]

In[39]:max(r)#求列表中的最大值Out[39]:40

In[40]:min(r)#求列表中的最小值Out[40]:1

In[41]:r.index(35)#求列表中元素35的索引号Out[41]:6

In[42]:r.count(2)#统计列表中某个元素出现的次数Out[42]:1

也可以查找列表中出现次数最多的元素,利用max()函数中的参数key,key的值为列表的方法,注意省略方法后面的括号()。In[43]:nums=[2,1,3,6,5,1,2,1]...:most=max(nums,key=nums.count)#出现频次最大的数...:mostOut[43]:11表示是nums列表中出现次数最多的元素。2.3元组Python中的元组(tuple)是一种不可变、有序的元素集合,其中每个元素可以是任意类型。

创建方法与列表相似,不同的是用小括号(),并且元组是不可变的,即元组是不能更改其中的元素。In[1]:t=(1,2,"a",[3,4])

In[2]:tOut[2]:(1,2,'a',[3,4])In[3]:t[3]Out[3]:[3,4]

In[4]:len(t)Out[4]:4

In[5]:type(t)Out[5]:tuple元组的索引切片方法同列表,包括一些函数如len()、type()等。

元组和列表之间可以相互转化,将元组转化为列表,只需使用list()函数即可,将列表转化为元组只需使用tuple()即可。In[6]:list(t)#将t元组转化为列表Out[6]:[1,2,'a',[3,4]]

In[7]:tuple(_)#将列表转化为元组Out[7]:(1,2,'a',[3,4])说明:单下划线“_”在这里作用是表示上一次运算的结果。此处在执行list(t)时没有将其赋值给某个变量,所以用“_”来表示。In[8]:t1=(1,2,3)...:t2=("a","b")

In[9]:t1+t2Out[9]:(1,2,3,'a','b')

In[10]:t2*2#元组乘以数Out[10]:('a','b','a','b')

In[11]:list(t2)*2#列表乘以数Out[11]:['a','b','a','b']元组和列表一样,可以使用“+”和“*”,分别表示元素合并和重复。2.4字典

字典用花括号({})创建,字典中的每个元素是一个键(key)值(key)对,键和值之间用冒号(:)隔开,而元素(多个键值对)之间用逗号隔开,。Python中的字典(dict)是一种可变、无序的键值对集合,其中键是唯一的不可变数据类型。字典是一种非常有用的数据类型,它可以用于存储、访问和操作数据,支持高效的查找、插入和删除操作。In[1]:d={"apple":1,"banana":2,"orange":3}...:dOut[1]:{'apple':1,'banana':2,'orange':3}创建字典的方法比较多,也可以以二元元组、二原列表或者相互交叉等创建。但需要注意的是,列表数据类型是不能作为字典的键名。In[2]:d1=dict([(1,2),("a","b")])...:d1Out[2]:{1:2,'a':'b'}

In[3]:d2=dict(([1,2],("a","b")))...:d2Out[3]:{1:2,'a':'b'}字典的元素的值是可以修改的,由于字典是无序的,所以没有像字符串、列表的索引,但有类似于索引的操作,把键名key当作索引即可。如上面的字典变量d2,要提取元素键为a的值,可以用d2["a"],返回其值value为"b"。In[4]:d2["a"]Out[4]:'b'这种提取字典键值的方法仅限于提取的键名在字典中存在,否则会报错。为了改变这种不友好的方式,可以使用get()方法。get()方法提取的键值不一定在字典中存在,若存在则返回提取到对应的值,若字典中不存在,则什么也不返回,当然也可以使用参数给出提示信息,如“你提取的键名不存在”。In[5]:d2.get("a")Out[5]:'b'

In[6]:d2.get("d")#没有d的键值对,所以返回空

In[7]:d2.get("d","你提取的键名不存在!")Out[7]:'你提取的键名不存在!'In[8]:d2["c"]=3#增加元素,因为d2中没有键名为“c”的键值对...:d2Out[8]:{1:2,'a':'b','c':3}

In[9]:d2["c"]=0#修改元素的值...:d2Out[9]:{1:2,'a':'b','c':0}

字典增加元素跟修改元素的值一样。修改元素的值,直接给这个元素的键赋值即可,当要修改的元素不存在时,即是添加元素。字典的合并使用update()方法,也可以使用双*合并{**dict1,**dict2}。In[10]:d1.update(d2)#合并两个字典,把d2合并到d1中去

In[11]:d1Out[11]:{1:2,'a':'b','c':0}

In[12]:{**d,**d2}#合并字典Out[12]:{'apple':1,'banana':2,'orange':3,1:2,'a':'b','c':0}In[13]:d1.pop("c")#按照给定的键名删除字典的键值对Out[13]:0

In[14]:d1Out[14]:{1:2,'a':'b'}字典的删除使用同列表相同的方法pop(),也可以使用del方法。In[15]:d2.items()#将字典转化为“类”二元元组列表模式Out[15]:dict_items([(1,2),('a','b'),('c',0)])

In[16]:list(_)#转化为列表Out[16]:[(1,2),('a','b'),('c',0)]字典可以转化为二元元组或列表,使用items()方法。字典还提供了其他许多方法,用于添加、删除、访问和操作键值对。以下是一些常用的字典方法:keys():返回字典中所有的键。values():返回字典中所有的值。items():返回字典中所有的键值对。get(key,default):根据键获取值,如果键不存在则返回默认值。pop(key[,default]):根据键移除并返回值,如果键不存在则返回默认值。clear():移除字典中的所有键值对。update(other_dict):将另一个字典的键值对添加到字典中。deld[key]:根据键删除字典中的键值对。ind.keys():检查键是否存在于字典中。In[17]:d2.keys()Out[17]:dict_keys([1,'a','c'])2.5集合Python中的集合(set)是一种可变、无序、唯一元素的集合。集合中的元素没有重复,因此集合可以用来进行去重操作。集合中的元素可以是任意类型,包括数字、字符串、列表、元组等。

集合用花括号{}表示,元素之间用逗号分开。注意空集合使用set()表示,{}表示空字典。In[1]:s={1,2,"a","b"}#创建一个集合

...:sOut[1]:{1,2,'a','b'}

In[2]:a=[1,2,3,1]

...:aa=set(a)#用列表创建一个集合,过滤掉重复元素

...:aaOut[2]:{1,2,3}

In[3]:type({})#{}表示空字典Out[3]:dictIn[4]:type(set())#set()表示空集合Out[4]:set集合添加元素可以使用add()方法;删除元素使用remove()方法。从集合中删除一个元素,也可以使用discard()方法,该方法从集合中删除一个元素时,如果元素不存在则不会报错。In[5]:s.add("d")#增加一个元素“d”In[6]:sOut[6]:{1,2,'a','b','d'}

In[7]:s.remove("d")#删除元素“d”In[8]:sOut[8]:{1,2,'a','b'}

In[9]:s.remove("e")#删除一个不存在的元素“e”会报错Traceback(mostrecentcalllast):CellIn[32],line1s.remove("e")KeyError:'e'In[10]:s.discard("e")#删除一个不存在的元素不会报错

In[11]:sOut[11]:{1,2,'a','b'}集合数据类型用的最多的就是交、并、差。交集使用intersection()方法,获取两个集合的交集,也可以使用“&”运算符。并集使用union()方法,获取两个集合的并集,也可以使用“|”运算符。差集使用difference()方法,获取两个集合的差集,也可以使用“-”运算符。In[12]:s1={1,2,3,"c"}...:s2={"a","b","c"}...:print("s1:",s1,"\n","s2:",s2)s1:{1,2,3,'c'}s2:{'a','b','c'}

In[13]:ersection(s2)#集合的交Out[13]:{'c'}

In[14]:s1&s2#集合的交Out[14]:{'c'}

In[15]:s1.union(s2)#集合的并Out[15]:{1,2,3,'a','b','c'}

In[16]:s1|s2#集合的并Out[16]:{1,2,3,'a','b','c'}

In[17]:s1.difference(s2)#集合的差Out[17]:{1,2,3}

In[18]:s1-s2#集合的差Out[18]:{1,2,3}练习1.已知:a=250,b=‘250’,请阐述a和b所引用的对象的区别。2.

将字符串“map”的字符顺序倒转为“pam”。3.请用代码将字符串’abcd’转化为列表L,再将L还原为字符串’abcd’。4.请提取自己身份证号码中的出生年月日。5.请统计字符串“Iamateacher,youareastudent.Lifeisshort,Ineedpython.”中字符a和e出现的次数。6.张三和李四的电话号码分别是6601和6602,请将他们的及其号码做成一个字典类型的数据,并将李四的号码改成6603。7.集合set有个功能就是过滤重复值。请输出字符串“Lifeisshort,Ineedpython”中不同的字符,并做成列表。大数据分析:基于Python

第3章流程控制3.1条件语句

条件语句也称判断语句或分支语句,使用if、elif和else关键字来执行不同的代码块,根据条件的真假来选择性地执行特定的代码。当条件分支为二分类时使用if/else结构,当多于两个分支时使用if/elif/…/else,elif按照需要使用。语法格式如下: if条件1:

条件1为真时执行代码块1 elif条件2:

条件2为真时执行代码块2 else:

条件1、2都不为真时执行代码块3

条件语句会按照代码块前后顺序进行逐一判断,当遇到条件为真时,会执行真条件下的代码块。In[1]:num=int(input("请输入一个数字:"))...:...:#使用if/else分支判断数字是奇数还是偶数

...:ifnum%2==0:...:print("您输入的是一个偶数。")...:else:...:print("您输入的是一个奇数。")请输入一个数字:7您输入的是一个奇数。例如判断输入的数的奇偶性。在这个例子中,首先通过input()函数从用户那里获取一个数字,并将其转换为整数。然后,使用if/else分支来检查这个数字是否是偶数(即当被2除时余数为0)。如果条件为真(即数字是偶数),则执行第一个代码块,打印出“您输入的是一个偶数”。如果条件为假(即数字不是偶数,也就是奇数),则执行else后面的代码块,打印出“您输入的是一个奇数”。接收变量不及格及格中良优xx<6060≤x<7070≤x<8080≤x<9090≤x再例如,现有学生成绩按照如下给出的档次,判断来自接收到的成绩属于哪个档次。In[2]:bz=['优','良','中','及格','差']#成绩层次分类...:s=int(input('请输入分数:'))#接收键盘输入...:...:ifs>=90:...:print(bz[0])...:elifs>=80:...:print(bz[1])...:elifs>=70:...:print(bz[2])...:elifs>=60:...:print(bz[3])...:else:...:print(bz[4])请输入分数:87良输出结果为:

条件语句也可以使用在行代码的表达式中,称为三元表达式。三元表达式是一种简洁的条件语句,它使用三个操作数:一个条件表达式和一个结果表达式,如果条件为真,则返回结果表达式1,否则返回结果表达式2。三元表达式的语法如下:value_if_trueifconditionelsevalue_if_false

其中,condition是一个条件表达式,如果它的值为True,则返回value_if_true,否则返回value_if_false。

例如,接收一个变量x,想要检查它是否大于10,如果是,则打印“Positive”,否则打印“Negative”,实现代码如下。In[3]:x=int(input("请输入整数:"))...:result="Positive"ifx>0else"Negative"...:print(result)请输入整数:-3Negative

接收到的x值为-3小于0,所以result的值为Negative。3.2循环语句

循环语句分为for和while两种类型,for循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象;while循环在指定的条件为真时,会重复执行代码块。3.2.1for循环for循环主要用于遍历一个序列(字符串、列表、元组、字典、集合等,以及一些容器内的元素,如range()、zip()等),将序列中的每一个元素逐个取出执行for代码行下的代码块,直到取完为止。例如,将列表中的元素逐个打印出来。In[1]:fruits=['苹果','香蕉','橙子','葡萄']...:foriinfruits:...:print(i)苹果香蕉橙子葡萄

为了节省空间,可以将打印结果显示在一行,使用分号进行分割,可以使用print()函数的end参数。In[2]:fruits=['苹果','香蕉','橙子','葡萄']...:...:foriinfruits:...:print(i,end=";")苹果;香蕉;橙子;葡萄;再如使用for循环计算列表中所有数字的和。In[3]:numbers=[1,2,3,4,5]...:sum=0...:foriinnumbers:...:sum+=i#等价于sum=sum+i...:...:print("列表中所有数字的和是:",sum)列表中所有数字的和是:15在这个例子中,首先创建了一个包含五个数字的列表。然后使用一个变量sum来存储列表中所有数字的和,然后使用for循环遍历这个列表,每次迭代中,变量i会被赋予列表中的下一个元素,然后我们将这个元素加到sum中。最后,我们打印出sum的值,即列表中所有数字的和。for还可以创建列表、元组或者字典。如将上面的列表numbers中所有奇数做成一个新的列表。In[4]:numbers=[1,2,3,4,5]

In[5]:[iforiinnumbersifi%2!=0]Out[5]:[1,3,5]

在上面的[iforiinnumbersifi%2!=0]代码中,首先创建一个列表,故外面使用[],内部产生的元素用i表示(即第一个i),i来自于numbers(即foriinnumbers),当满足被2除余数不等于0时(即ifi%2!=0),这样的i才被留在该列表中。3.2.2while循环while循环主要用于条件为真时,会重复执行其下的代码块,直到给定的条件不再满足。while循环的基本语法如下:whilecondition:block

这里的condition是一个表达式,当它的结果为True时,会执行其下的block代码块,一旦condition变为False,循环就会停止。例如,使用while循环计算5!的值,并返回结果。In[1]:result=1...:i=1...:whilei<=5:...:result*=i...:i+=1...:print(result)120

在循环中,使用result变量来保存阶乘的结果,并给出初始值1,再使用i变量来迭代从1到5。每次迭代将i乘以result来计算阶乘的值,并将i增加1。最后,返回输出阶乘值。

注意,在编写while循环时,必须确保循环内的代码能够改变条件表达式的值,也称条件控制,否则可能导致无限循环。在无限循环中,程序会一直执行下去,直到手动停止。这通常不是我们想要的结果,所以在编写while循环时要特别注意条件控制。In[2]:n=0#方法1...:whilen<5:...:n_squared=n**2...:print(n_squared,end=";")...:n+=10;1;4;9;16;

In[3]:n=0#方法1...:while(n_squared:=n**2)<25:#海象表示法...:print(n_squared,end=";")...:n+=10;1;4;9;16;下面是两种输出小于5的自然数的平方的方法。海象表达式使用冒号和等于号组合(:=)来表示,即使用一个变量名后跟一个冒号和等于号,表示将一个表达式的值赋给这个变量。使用海象表达式可以简化代码,使代码更加简洁。在代码行“while(n_squared:=n**2)<25”中,海象表达式将n**2赋值给变量n_squared,节省了计算量,使代码变得更简洁。需要注意的是,海象表达式只能在Python3.8及以上版本中使用,如果使用较早的版本,则会出现语法错误。此外,虽然海象表达式可以简化代码,但也可能会降低代码的可读性。请试运行下面的代码,观察输出的结果。In[4]:rows=int(input("Enternumberofrows:"))...:k=0...:foriinrange(1,rows+1):#i控制行...:forspaceinrange(1,(rows-i)+1):#控制每行开始的空格数...:print(end="")#打印每行的*前的空格...:whilek!=(2*i-1):#控制*输出...:print("*",end="")#同行无分隔符输出*...:k+=1#输出*的个数...:k=0#下一行k从0开始...:print()#换行Enternumberofrows:5*************************3.3break与continue在Python中,break和continue都是控制循环流程的关键字。它们的作用如下:break在循环中,一旦遇到break,无论循环条件是否继续为真,都会立即停止当前循环。例如,在一个for或while循环中,如果你在某个条件下调用break,那么循环将立即结束,程序流程将继续在循环之后的下一行代码。In[5]:foriin[0,1,2,3,4,5,6,7,8,9]:...:ifi==5:...:break...:print(i)01234

在这个例子中,当i等于5时,break语句将被执行,for循环将立即停止,尽管列表中有0到9的数字。因此,这段代码只会打印出0到4,然后终止整个循环。continue是一个控制流语句,用于跳过当前循环中的剩余语句,并立即开始下一轮循环。这意味着,如果continue语句在一个循环内部(例如for或while循环),那么该循环的剩余部分将不会被执行,而是立即开始下一轮循环。In[6]:foriin[0,1,2,3,4,5,6,7,8,9]:...:ifi==5:...:continue...:print(i)012346789

在这个例子中,当i等于5时,continue语句将被执行,这会跳过输出语句,并立即开始下一轮循环。因此,这段代码会输出出0到9,但是跳过5。3.4异常处理异常处理是一种处理程序中特殊情况(即异常)的机制。在编程中,异常是程序运行时发生的问题,例如运算中出现除数是零,访问无效的内存区域等。异常处理可以帮助我们在这些问题发生时管理程序,不让程序崩溃。在Python中,异常处理通常使用try,except,else,finally等关键字,其格式如下。try:block1except:block2else:block3finally:block4try下的block1代码块是需要测试的代码(即有可能会出现异常情况),在执行程序时,首先执行block1,此时block1可能会发生意外错误,当block1发生错误时,程序将进入except下的block2;若不发生错误,则进入else下的block3。except和else的顺序不能颠倒,except必须在else之前,else也可以省略。finall

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论