2017.7python数据分析基础-材料第13章_第1页
2017.7python数据分析基础-材料第13章_第2页
2017.7python数据分析基础-材料第13章_第3页
2017.7python数据分析基础-材料第13章_第4页
2017.7python数据分析基础-材料第13章_第5页
已阅读5页,还剩158页未读 继续免费阅读

下载本文档

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

文档简介

1、ython数据分析 学院:会计学院 姓名:朱哲 邮箱: 为什么学习数据分析?世界通用语言:会计?英语?计算机语言?数学?数学让你的专业知识更加精确;各种数据分析工具可以把数学结果做出来为什么是python?相比stata、spss等,用写代码的方式处理数据更可以随心所欲python数据分析基础课学习什么?两类:python语法+统计学(方差分析、因子分析、回归分析等)+用6种python数据分析包把统计的结果做出来如何学习python数据分析?两点:数理统计学好;除了多练习,别无它法!这门课难度怎么样?难度系数,中等难度。课上两节课,需要课后花四节课的时间去学习!要不要买教材?可买可不买,建议

2、手上要有一本教材,同时不能局限于一本教材。这门课趣味性怎么行?大概是3-1-1-0-0-1-2-3-4-5,请做好心理准备,几乎每个人都要经历一段时间学习的痛苦,但坚持到最后会有很大的回报。学习这门课有什么用?这是基础课,是修炼内功的开始,既能掌握数据分析的基础,也能有深入学习数据分析的能力。让你写论文处理数据时不求人,并且在找工作让你多个选择。选修课干嘛这么认真,我就是来混学分的,混过去这17周可不可以?你是成年人,你有自己的选择。不过不建议你17节课混日子,可以挑战下自己。学习过程中,发现听不懂了或者自己看的书上有些不对怎么办?小问题,第一种情况那就把书从头再看一遍,书上的代码全部跑一遍。

3、如果还不会,就再来一遍!第二种情况,一句话,不要因为问题停步不前!可以找资料解决,解决不了的直接略过去回头在看。如何考试?提交一篇数据处理的论文,题目自拟,要有数据分析过程,数据分析方法可以使用本课程讲解的方法,但不限于讲授的方法。最后,课堂纪律:从学生开始,做一个有契约精神的人,认真听课,维护课堂纪律,按时交作业。对于违背契约精神的学生,采取回答问题、警告、反映到学工处、挂科等措施。周次课程章节教 学 内 容授课学时教学方式 1第一章引言和Python简介2理论教学与实操2第二章数据类型、运算符与功能命令2理论教学与实操3第二章元组、列表、字典等;格式化输入输出;内置函数2理论教学与实操4第

4、三章流程控制和遍历2理论教学与实操5第三章函数与函数式编程2理论教学与实操6第三章内置函数、模块与包2理论教学与实操7第四章Numpy、pandas2理论教学与实操8第四章数据准备与数据处理2理论教学与实操9第四章数据分析与数据可视化2理论教学与实操10第五章文件读写操作、with语句、安装statsmodels包、界面恢复、计算精度2理论教学与实操11第五章矩阵运算及其他2理论教学与实操12专题一简单统计推断2理论教学与实操13专题二方差分析2理论教学与实操14专题三横截面数据的回归分析2理论教学与实操15专题四主成分和因子分析2理论教学与实操16专题五时间序列的回归分析2理论教学与实操17

5、专题六面板数据的回归分2理论教学与实操余老师选修课群: 362721255参考教材1、阮敬,python数据分析基础,中国统计出版社,2019年2、贾俊平,统计学,中国人民大学出版社,2016年3、Magnus Iie Hetland,python基础教程3,人民邮电出版社,2018年4、斯托克、沃森,计量经济学,上海三联出版社,2018年5、伊夫希尔皮斯科,python金融大数据分析,人民邮电出版社,2015年学习内容:第一部分 Python简介第二部分 Python数据类型与运算第三部分 流程控制及函数与类*第四部分 Python数据分析实战*第五部分 其他第一部分 Python简介Pyt

6、hon语言是少有的一种可以称得上既简单又功能强大的编程语言。你将惊喜地发现Python语言是多么地简单,它注重的是如何解决问题,而不是编程语言的语法和结构。Python的官方介绍是:Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。不需要任何编程基础,完全可以从零开始学习,关键看你能否坚持。注释:Python语言的创造者Guido van Rossum是根据英国广播公司的节目“蟒蛇飞行马戏”命

7、名这个语言的,并非他本人特别喜欢蛇缠起它们的长身躯碾死动物觅食。Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。缺点:前后版本不兼容,这确实是让新、老学习人员头痛的事情。因为前后版本不兼容,导致许多人为选择python2.x还是python3.x发愁。我推荐使用python3.x。为什么我们要使用 Python3.x?Python2.x到底有什么问题?看起来很多程序员依然都在使用Python2.7?确实还有相当多的程序员在使用 Python2.7,不过 Python3.x才是 Python发展的未来,就像WIN7和 WIN10一样。我们发觉 Pyt

8、hon3.x中的新特性确实很妙,很值得进行深入学习!你也不用担心,如果你了解了Python3,Python2的代码阅读对于你来说根本不成问题!1.1安装Python Windows用户可以访问 ,从网站上下载最新的版本(在初写成本书的时候,最新版本是3.5.1)。它的大小大约是27.4MB左右,与其他大多数语言相比是十分紧凑的。安装过程与其他Windows软件类似。 在本书“杀青”的时候,使用的是最新版Python3.5,计算机系统为win10。安装python很简单,双击python-3.5.1.exe,勾选“Add Python 3.5 to PATH”,再点击“Install Now”即

9、可,如图,其下方已经显示了安装的路径,安装完毕后会显示安装成功,点击Close即可使用了。 安装完成后,开始菜单里会显示安装目录,如图所示。当我们要写代码时,直接点击IDLE即可。后面我们还会讲python的其他安装方法,目的是为了避免安装复杂的python的数据包,如pandas、numpy等。关于python下载和学习的网站很多,下面网站可以去浏览下:1 2 3 打开Python的IDLE,启动Python解释器。现在输入print(Hello World),然后按Enter键。你应该可以看到输出的单词Hello World。注意:此处的为电脑自动显示的提示符,不需要输入的。 文中所涉及到

10、的括号()、引号以及冒号:都需要在英文半角状态下输入。1.2 Python2和Python3的区别本小节可以略过,当你需要的时候你可以回过头来再看看这部分。当然你要是能够先浏览一遍那当然最好不过了,至少你知道这里面讲了什么内容,如print(hello world)和print hello world区别在哪里,便于你今后查阅。1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。 Py3.1性能比Py2.5慢15%,还有很大的提升空间。但据说3.5版本已经性能优于2.7版本

11、。2.编码 Py3.X源码文件默认使用utf-8编码,这就使得以下代码是合法的,但在2.X是不可思议的事情,对于中国人来说是个福音。 中国 = china print(中国) china 3.语法 1)去除了不等号,全部改用!=。2)关键词加入as 和with,还有True,False,None。3)整型除法返回浮点数,要得到整型结果,请使用/。4)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数。例如: 2.X: print The answer is, 2*2 3.X: print(The answer is, 2*2) 5)改变

12、了顺序操作符的行为,例如x a = 1 #int type(a) b = True #boolean type(b) c = 4+3j plex type(c) d = 3.14 #float type(d)数字类型:整数、浮点数、布尔类型(True为1、False为0)、复数字符串:单个的字符也是字符串操作符描述符例子(a=10,b=20)+加法 - 加 - 两个对象相加a + b = 30-减法 - 得到负数或是一个数减去另一个数a - b = -10*乘法 - 两个数相乘或是返回一个被重复若干次的字符串a * b = 200/除法 b除以ab / a = 2%取模 - 返回除法的余数b

13、% a = 0*指数 - 返回a的b次幂a*b = 10 的幂20/取整除 - 返回商的整数部分9/2 = 4 而 9.0/2.0 = 4.02.2.1算数运算符操作符描述符例子(a=10,b=20)=检查两个操作数的值是否相等,若相等则条件变为真(a=b)不为True!=检查两个操作数的值是否相等,若不相等则条件变为真(a!=b)为True检查左操作数的值是否大于右操作数的值,若大于则条件为真(ab)不为True检查左操作数的值是否小于右操作数的值,若大于则条件为真(a=检查左操作数的值是否大于等于右操作数的值,若大于等于则条件为真(a=b)不为True=检查左操作数的值是否小于等于右操作数

14、的值,若小于等于则条件为真(aprint(I love * 5) 可以正常执行?而 print(I love + 5) 却报错?运算类型不一致。在 Python 中不能把两个完全不同的东西加在一起,比如说数字和文本,正是这个原因,print(I love + 5) 才会报错。这就像在说“我的体重67公斤加上我的身高170cm是多少”一样没有多大意义,量纲不同!不过文本乘以一个整数来翻倍就具有一定的意义了,前边print(I love * 5)意思就是将 I love 这个字符串接连打印五次。2.2.4常量与变量常量有数值、字符串、逻辑真假,如12,yy,12,True,False变量是可以赋值

15、的量,如a=3.变量只能由数字、字母和下划线构成,但不能以数字开头。而且变量区分大小写,下划线开头的变量有特殊含义;变量名不能有空格和标点符号;可以用中文命名变量,但不建议!变量不用声明,可以直接赋值。使用前,一定要先赋值!2.2.4常量与变量以单下划线开头的,如_foo;以双下划线开头的,如_foo;以双下划线开头和结尾的_foo_。这些都是有特殊含义的。另外,python中还有一些保留标识符,称之为关键字(keywords)。保留关键字是不能用作任何其他标识符(或者变量)名称的。保留关键字可以通过运行如下代码查看:import keywordkeyword.kwlistFalse, Non

16、e, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield2.2.5字符串字符串是字符的序列。字符串基本上就是一组单词。字符串需用单引号()或双引号()括起来。使用单引号():可以用单引号指示字符串,就如同Quote me on t

17、his这样。所有的空白,即空格和制表符都照原样保留。使用双引号():在双引号中的字符串与单引号中的字符串的使用完全相同,例如Whats your name?。使用三引号(或):利用三引号,可以指示一个多行的字符串。可以在三引号中自由的使用单引号和双引号。如注释一段文字可用三引号。转义符:假设想要在一个字符串中包含一个单引号(),那么该怎么指示这个字符串?例如,这个字符串是Whats your name?。肯定不能用Whats your name?来指示它,因为Python会弄不明白这三个单引号从何处开始,何处结束。这时,可以通过转义符来完成这个任务。用来指示单引号注意这个反斜杠。现在可以把字符

18、串表示为Whats your name?。另一个表示这个特别的字符串的方法是Whats your name?,即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,你可以用转义符来指示反斜杠本身。转义字符描述(在行尾)续行符反斜杠符号单引号双引号a响铃b退格(backspace)e转义000空n换行v纵向制表符t横向制表符r回车f换页oyy八进制xyy十进制other其他的字符以普通格式输出字符串是不可变的:这意味着一旦创造了一个字符串,就不能再改变它了。虽然这看起来像是一件坏事,但实际上它不是。我们将会在后面的程序中看到为什么说它不是一个缺点。字符串可以使用

19、+ 运算符串连接在一起,或者用 * 运算符重复: print(str+ing, my*3)string mymymy2.2.6字符串索引与分片string:字符串(即不能修改的字符)如: str = Hello My friend字符串是一个整体。如果想直接修改字符串是不可能的,但我们能够读出字符串的某一部分。1.字符串的索引给出一个字符串,可输出任意一个字符。Python中的字符串有两种索引方式:第一种是从左往右,从0开始依次增加;第二种是从右往左,从-1开始依次减少。 word = Python print(word0)P print(word-1, word-6)n P2.字符串的分片分

20、片就是从给定的字符串中分离出部分内容。Python中用冒号分隔两个索引,形式为变量头下标:尾下标,截取的范围是前闭后开的,并且两个索引都可以省略。 str = Hello My friend print(str1:4)ell print(str:-7)Hello My print(str5:) My friend print(str:)Hello My friend 分片的扩展形式:strI:J:K 意思是从I到J-1,每隔K个元素索引一次,如果K为负数,就是按从由往左索引。 print(str2:7:2)loM print(str2:7:1)llo M字符串包含判断操作符:in,not in

21、 str = Hello My friend He in strTrue she not in strTrue str.find(o) #字符串模块提供的查找方法4ord函数将字符串(单个字符)转换为对应的ascii,而char函数讲数字转化为字符print(order(a)print(char(97)string模块还提供了很多方法,如:S.find(substring, start ,end) #可指范围查找子串,返回索引值,否则返回-1 S.rfind(substring,start ,end) #反向查找S.index(substring,start ,end) #同find,只是找不

22、到产生ValueError异常S.rindex(substring,start ,end) #同上反向查找S.count(substring,start ,end) #返回找到子串的个数S.capitalize() #首字母大写S.lower() #转小写S.upper() #转大写S.swapcase() #大小写互换S.split() #将string转list,默认以空格切分,也可以指定字符切分s = A brief reference about the graphical user interface.处理字符串的内置函数len(str) #串长度max(abcxyz) #寻找字符串

23、中最大的字符min(abcxyz) #寻找字符串中最小的字符string的转换int(str) #变成整型,如int(12) 结果为12,数值型2.2.7 输入输出printprint是一个常用函数,其功能就是输出括号中得字符串(在Python 2.x中,print格式写成print Hello World!)。 print的另一个用法,也就是print后跟多个输出,以逗号分隔。 a=10 print(a,type(a)10 若要将多个结果打印在一行,可以在print中添加end=,,如:print(test_listi,end=,) ,后面将会用到。inputinput函数将用户输入的内容作

24、为字符串形式返回,就算你输入的是数字,但这个返回的“数字”的类型是字符型。【例2-2】input输入 a = input(Input: )如果要想获取数字,可以使用“int”函数将字符转化为数字。你可以用:x = int(input(输入:)但需要注意,这里是不可以输入字符型,如输入字母则会报错,如输入acd。2.2.8原始字符串先看个例子: d=c:news d c:news print(d) c: ews d=rc:news d c:news print(d) c:news2.2.9 Rangepython中的内置函数range(n),其中参数n代表:从0到n-1的一个序列,即长度为n的一

25、个序列。 当然,可以自定义我们需要的起始点和结束点,如: range(1,5) #代表从1到5(不包含5),即:1、2、3、4还可以定义步长。定义一个从1开始到30结束,步长为3的列表。 range(1,30,3)range(1, 30, 3) list(range(1, 30, 3) #用list把值显示出来,list后面介绍1, 4, 7, 10, 13, 16, 19, 22, 25, 282.2.10元组、列表、字典、集合 tuple元组(tuple)创建之后,元组的元素不能修改。元组写在小括号里,元素之间用逗号隔开,类似于向量写法。元组中的元素类型也可以不相同。 a = (1991,

26、 2014, physics, math) print(a, type(a), len(a) (1991, 2014, physics, math) 4元组与字符串类似,可以被索引且下标索引从0开始,也可以进行截取切片,其实,可以把字符串看作一种特殊的元组。 tup = (1, 2, 3, 4, 5, 6) print(tup0, tup1:5) 1 (2, 3, 4, 5) tup0 = 11# 修改元组元素的操作是非法的 Traceback (most recent call last): File , line 1, in tup0 = 11 TypeError: tuple objec

27、t does not support item assignment tup2 = (20,) #创建只有一个元素的元组,该元素后面的逗号是不可忽略 tup2(20,) tup3 = (20) tup320注意:(2)其实就是2,仍然是整型,但是(2,)就是元组。元组是不可添加删除的。另外,元组也支持用+操作符。 tup1, tup2 = (1, 2, 3), (4, 5, 6) print(tup1+tup2)(1, 2, 3, 4, 5, 6)元组由不同的元素组成,每个元素可以存储不同类型的数据,而元组中的元素则代表不同的数据项。创建元组,不定长,但一旦创建后和字符串一样都是不可变的。添加

28、元组 user = (01,02,03,04) user = (user,05) user(01, 02, 03, 04), 05) 思考,如果想得到(01, 02, 03, 04, 05)怎么办?访问元组 user = (01,02,03,04)user0 01user203元组包含了以下内置函数1、len(tuple):计算元组元素个数。2、max(tuple):返回元组中元素最大值。3、min(tuple):返回元组中元素最小值。(max和min比较数字才有意义)4、tuple(list):将列表转换为元组。注意:cmp()函数在python3.5中已经被删除了不可修改元素 user=(

29、1,2,3) user0=2 Traceback(mostrecentcalllast): File,line1,in user0=2 TypeError:tupleobjectdoesnotsupportitemassignment 访问二元元组(二维) user1=(1,2,3) user2=(4,5,6) user=(user1,user2) print(user12) 6复制粘贴代码的时候主要删除空格。解包 user = (1,2,3) a,b,c = user #变量个数要等于元组的长度 a1 b2 c3没必要这要用,直接用useri就行了 list(列表与元组类似,不同之处在于列表

30、的元素可以修改)列表是写在方括号之间、用逗号分隔开的元素列表。列表中元素的类型可以不相同。如:a = I,you,he,5。索引同字符串和元组一样,从0开始,0表示第一个元素索引,-1最后一个元素索引,-len()第一个元素的索引,len()-1最后一个元素的索引。创建包含一个元素的列表时不用a=26,,可以直接a=26取list的元素数量:len(list) #list的长度。创建连续的list list(range(1,5)1, 2, 3, 4 list(range(1, 10, 2) #步长为2,从1开始,每隔2取一个数1, 3, 5, 7, 9也可以创建连续的tupletuple(ra

31、nge(1,5)(1, 2, 3, 4)和字符串一样,列表同样可以被索引和切片,列表被切片后返回一个包含所需元素的新列表。 a = I,you,he,5 a1:3you, he a1you(实际print中,不包含引号) a1=she(可以赋值,不同于元组!) aI, she, he, 5列表还支持串联操作,使用“+”操作符: a = 1, 2, 3, 4, 5 a + 6, 7, 81, 2, 3, 4, 5, 6, 7, 8在列表a中n位置插入一个值q:an:n=q注意:不是替换 将字符串转化为列表:list(str) a = 1, 2, 4, 5 a2:2=3 #在列表中的某位置插入一个

32、值 a1, 2, 3, 4, 5 len(a) #测试列表的长度(含元素的个数)5 word=hello list(word) #将字符串转化为列表h, e, l, l, o也可以转换为元组1list排序对列表进行排序使用列表sort()和sorted()函数。1)sort()(会在原列表基础上修改,所以无返回值) sort()函数对列表排序时改变了原来的列表,从而让其中的元素能按一定的顺序排列。 a = 3,2,5,4,9,8,1 a.sort() a1, 2, 3, 4, 5, 8, 9b=12,33,3,8,29b.sort(reverse=True)print(b)注意sort()函数

33、改变原来的列表,函数返回值是空值,即None。因此,如果需要一个已排好序的列表副本,同时又要保留原有列表不变的时候,就不能直接简单的使用sort()函数。为了实现上述功能使用sort()的方法是:先获取列表a的副本b和c,然后再对b和c进行排序。为了理解的更深刻,我们将对a和b、c的存储地址进行查验,代码如下: a = 3,2,5,4,9,8,1 id(a) #查看a的存储地址55494776 b=a: #拷贝一个副本b b3, 2, 5, 4, 9, 8, 1 id(b) #查验b的存储地址55486264 #发现b和a地址不一致,说明复制了一份 c=a #复制一个副本c c3, 2, 5,

34、 4, 9, 8, 1 id(c) #查验c的存储地址55494776 #发现c的地址跟a一致,说明c是a一个标签,不是真复制 b.sort() #对b进行排序 b1, 2, 3, 4, 5, 8, 9 a #b排序后对a没有影响3, 2, 5, 4, 9, 8, 1 c.sort() #对c进行排序 c1, 2, 3, 4, 5, 8, 9 a #c排序后对a有影响,与a、c一致1, 2, 3, 4, 5, 8, 9这里就要注意,从他们的存储地址就知道,c仅仅是a的一个标签,并不是真正意义上的复制,不论是a改变,或是c改变,其实改变的都是同一个地址里面的内容,所以相互有影响。只有b才是真正意

35、义上的拷贝,后面我们还会遇到“深拷贝”。a = 3,2,5,4,9,8,1print(id(a) #查看a的存储地址b=a: #拷贝一个副本bprint(b,id(b)c=a #复制一个副本cprint(c,id(c)b.sort() #对b进行排序print(b,id(b)print(a,id(a) #b排序后对a没有影响c.sort() #对c进行排序print(c,id(c)print(a,id(a) 2)sorted()(返回一个新的列表)获取已排序的列表副本的方法是使用sorted()函数。注意,sorted()函数可以用于任何可迭代的对象。 a = 3,2,5,4,9,8,1 so

36、rted(a) #对a排序后产生一个新的列表1, 2, 3, 4, 5, 8, 9 a3, 2, 5, 4, 9, 8, 1b= 3,2,5,4,9,8,1print(sorted(b,reverse=True)注意a.sort()和sorted(a)的区别,sorted(a)产生的是一个新列表,而a.sort()是对a直接排序了。3)reverse()函数L.reverse() #倒序排列 e.reverse()(会在原列表基础上修改,所以无返回值) e1, 2, 3, 4, 5 或者: b=12,5,3,27,9print(reversed(a)#这样返回的是一个迭代器,必须再list一下

37、才可以(返回一个新的序列,要使用,先转换为具体的格式) print(list(reversed(a)9, 27, 3, 5, 12或者: w=1,2,L w:-1L, 2, 1对字符串也可以同样反转。2list的元素追加(会在原列表基础上修改,所以无返回值)L.append(var) #追加元素,追加的元素可以是一个list、数、字符串等 w=1,2,L q=8,9 w.append(q) #不能写成w= w.append(q) w1, 2, L, 8, 9注意:w= w.append(q)这样写是错误的,append方法是不能返回值的。L.extend(list) #追加list,即合并li

38、st到L上,只能是追加list。 w=1,2,L q=8,9 w.extend(q) w1, 2, L, 8, 9注意:append和extend的区别是:append整体添加成list的一个元素。L.insert(index,var) #在index位置插入vara = I,you,he,5 a.insert(1,love)a I, love, you, he, 53List删除元素L.pop(index) #返回被删除的index位置元素,只能删一个元素,并从list中删除之,默认删除最后一个元素。注意与remove的区别!如何删除多个元素?如L中1:3的元素? 用del L1:3。a =

39、 I,you,he,5 a.pop(2)(会在原列表基础上删除,返回被删除的元素)heaI, you, 5a.pop()(默认删除最后一个元素)5aI, you del L1 #删除指定下标的元素(这是语句,不是函数)a = I,you,he,5 del a3a I, you, hedel L1:3 #删除指定下标范围的元素 a = 1, 2, 3, 4, 5 del a2 #删除list中索引为2的值 a1, 2, 4, 5L.remove(var) #删除第一次出现的var元素li = 1,2,3,4,5,6li.remove(4)li1, 2, 3, 5, 6另外还可以使用切片来删除:l

40、i = 1,2,3,4,5,6li = li:-1li1, 2, 3, 4, 5使用这个方法时注意,如果li被作为参数传入函数,那么在函数内使用这种删除方法,将不会改变原list:li = 1,2,3,4,5,6def delete(li, index):li = li:index + liindex+1:delete(li,3)print(li)# 会输出 1,2,3,4,5,64list 操作符 :,+,*,a1: #片段操作符,用于子list的提取1,2+3,4 #结果为1,2,3,4。同extend()2*4 #结果为2,2,2,25list的索引列表:array = 1, 2, 5,

41、 3, 6, 8, 4列表的索引如下图,对应的元素1=array0= array-7,以此类推。 array0: #列出0以后的1, 2, 5, 3, 6, 8, 4 array1: #列出1以后的2, 5, 3, 6, 8, 4 array:-1 #列出-1之前的1, 2, 5, 3, 6, 8 array3:-3 #列出3到-3之间的3那么两个:会是什么那? array:2 #表示步长为2取元素,即隔一个元素取一个元素1, 5, 6, 4 array2:5, 3, 6, 8, 4 array:31, 3, 4 array:41, 6如果想让他们颠倒形成reverse函数的效果: array

42、:-14, 8, 6, 3, 5, 2, 1 array:-24, 6, 5, 16其他方法L.count(var) #该元素在列表中出现的个数L.index(var) #返回第一个var元素的位置,无则抛异常 dict先来看段程序。【例2-3】打印通讯录 name=Ben,Jone,Jhon,Jerry,Anny,Ivy,Jan,Wong tel=6601,6602,6603,6604,6605,6606,6607,6608 print(0:1.format(name0,tel0) #格式化输出Ben:6601 print(%s:%s%(name0,tel0) #格式化输出Ben:6601字

43、典是一种映射类型(mapping type),它是一个无序的“键: 值”对集合。每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。即: Key: Value关键字(key)必须使用不可变类型,在同一个字典中,关键字必须互不相同。 dic = # 创建一个空字典 dic_tel = Jack:1557, Tom:1320, Rose:1886 #创建一个字典 print(dic_tel)Tom: 1320, Rose: 1886, Jack: 1557再来看例2-3:name=Ben,Jone,Jhon,Jerry,Anny,I

44、vy,Jan,Wongtel=6601,6602,6603,6604,6605,6606,6607,6608原理就是每次从name中取一个姓名记为n1,再从tel中取一个号码记为t1,再把n1和t1组成键值对n1:t1,成为字典Tellbook中的一个元素,如此循环,就全部构成了字典的元素。【例2-4】 name=Ben,Jone,Jhon,Jerry,Anny,Ivy,Jan,Wong tel=6601,6602,6603,6604,6605,6606,6607,6608 Tellbook= #创建一个空字典 for i in range(len(name): n1=.format(name

45、i) #从name中取一个姓名 t1=.format(teli) #从tel中取一个电话 Tellbookn1=t1 #再把d2这个号码赋值给字典Tellbook的d1键 print(Tellbook)Jan: 6607, Ben: 6601, Ivy: 6606, Anny: 6605, Wong: 6608, Jhon: 6603, Jone: 6602, Jerry: 6604(1)字典的增、删、改、查TellbookWang = 3 #给键赋值,不管键是否存在,不存在则直接创建。del TellbookWong # 删除一个键值对TellbookBen #通过key查询对应的值list

46、(Tellbook.keys() # 返回所有key组成的listlist(Tellbook.values() # 返回所有value组成的listsorted(Tellbook.keys() # 按key对字典排序,值也可以排序Ben in Tellbook # 成员测试(根据键)Mary not in Tellbook # 成员测试构造函数 dict()直接从键值对构建字典,如下: dict(sape, 4139), (guido, 4127), (jack, 4098)guido: 4127, jack: 4098, sape: 4139 dict(sape=4139, guido=41

47、27, jack=4098)guido: 4127, jack: 4098, sape: 4139字典有一个items的方法:将字典里的元素(一个键值对)转化为元组作为列表的一个元素。 d= a:1, b:2, c:3 t= d.items() print(t) dict_items(b, 2), (c, 3), (a, 1) list(t) (b, 2), (c, 3), (a, 1)当然上面的过程是可逆的,即元组列表可以初始化成字典: t=(a,1),( b,2),( c,3) d=dict(t) print(d)b: 2, c: 3, a: 1Update可以合并两个字典 dict =

48、Name: Zara, Age: 7 dict2 = Sex: female dict.update(dict2) dictAge: 7, Sex: female, Name: Zara用tuple作为键创建字典 seq = (name, age, sex) dict = dict.fromkeys(seq) #给字典key赋值来自seq dict #因为仅有key,没有vale,所以显示键值为空Nonesex: None, age: None, name: None dict = dict.fromkeys(seq, 10) #给字典键值对赋值,这里假设都赋10 dictsex: 10, a

49、ge: 10, name: 10Dict=Age: 7, Sex: female, Name: Zaradictionary的方法D.get(key, 0) #同dictkey,多了个没有则返回指定的值(此处为0)D.keys() #返回字典键的列表D.values() #返回字典值的列表D.items() #将字典转化为元组作为元素的一个列表D.update(dict2) #合并字典,将dict2增加到当前的字典中D.pop(key) #从字典中删除指定的键值对,键名这个参数必须有。D.popitem() #没有参数则从字典中随机删除一个键值对。已空则抛异常D.clear() #清空字典,不

50、同于del dict是删除字典D.copy() #拷贝字典Dict1=dict.copy() #克隆,即另一个浅拷贝,深拷贝则是deepcopy,如下例 dict=sex: 10, age: 10, name: 10 dict.get(sex, None) #若没有sex键,则返回指定的None 10 dict.keys() #要想获取键名列表,直接list(dict.keys()即可 dict_keys(sex, age, name) dict.items() #要想获取键值列表,直接tuple(dict.keys()即可 dict_items(sex, 10), (age, 10), (n

51、ame, 10) dict.pop(sex) #删除sex键值对 10 dict age: 10, name: 10 dictsex=10 #增加键值对sex:10 dict sex: 10, age: 10, name: 10 dict.popitem() #随即删除一个键值对(sex, 10) dictage: 10, name: 10 dict1=dict.copy() #复制(浅拷贝)一个字典,浅拷贝只对简单类型拷贝 dict1age: 10, name: 10 dict.clear() #清空字典,不是删除字典,即得到一个空字典 dict #dict已经变成了一个空字典 import

52、 copy #导入copy函数(或者是模块) dict=copy.deepcopy(dict1) #深拷贝,将dict1拷贝给dict dictage: 10, name: 10(2)字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的,所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Python中字典的排序分为按“键”排序和按“值”排序。1.按“值”排序按“值”排序就是根据字典的值进行排序,可以使用内置的sorted()函数。 dict=班级: 1, age: 10, score: 10 sorted(dict.items(), key=lambda

53、 e:e1, reverse=True)(score, 10), (age, 10), (班级, 1)其中e表示dict.items()中的一个元素,e1则表示按值排序。如果把e1改成e0,那么则是按键排序,reverse=False可以省略,默认为升序排列。说明:字典的items()函数返回的是一个列表,列表的每个元素是一个键和值组成的元组。 因此,sorted(dict.items(), key=lambda e:e1, reverse=True)返回的值同样是由元组组成的列表。2.按“键”排序 对字典进行按键排序也可以使用上面的sorted函数,只要改为sorted(dict.items

54、(), key=lambda e:e0, reverse=True)就可以了。不过除了这个方式之外,还有另外的方法:通过列表的排序来达到使字典有序的目的。 set集合(set)是一个无序不重复元素的集,基本功能是去重。可以使用大括号或者set()函数创建set集合。注意:创建一个空集合必须用 set()而不是 ,因为 是用来创建一个空字典。 student = Tom, Jim, Mary, Tom, Jack, Rose print(student) # 重复的元素被自动去掉Jim, Jack, Mary, Rose, Tom Rose in student # membership tes

55、ting(成员测试)Truestudent.add(Ben) #增加一个元素 print(student)Jim, Jack, Mary, Rose, Tom, Ben集合运算 a = set(abracadabra) #将字符串拆成集合 ab, d, r, a, c b = set(alacazam) #将字符串拆成集合 bl,m,z,a,c a-b # 从a中去除b的元素b, d, r a|b # a和b的并集l,r,a,c,z,b,m,d a&b #提取 a和b的公共元素交集a, c ab #提取 a和b中不同时存在的元素(交集的补集,也叫对称差)l,r,z,m,b,d去重 集合有过滤重

56、复元素的功能,自动将重复的元素删除。 set(2,2,2,4,4) 2, 4 2.2.11格式化输出 %格式化输出 python用print进行格式化输出,有以下几种模式,代码如下:1打印字符串 print (His name is %s%(Aviad)His name is Aviad要打印的内容里(His name is %s%(Aviad))有两个%,这里的%s表示先在His name is %s这个字符串中占个位置,而后面的Aviad才是真正%s位置上要显示的内容,也就是说%(Aviad)这个东西是要告诉前面的%s,它要显示的内容在我的%()这里面。2打印整数 print (He is

57、 %d years old%(25)He is 25 years old 上面的例子%s是要替字符串占位置,这里的%d是替整数占位置。3打印浮点数 print (His height is %f m%(1.83)His height is 1.830000 m 这里是%f表示替浮点数占位置。4打印浮点数(指定保留小数点位数) print (His height is %.2f m%(1.83)His height is 1.83 m这里的%.2f表示浮点数占位置,表示只显示小数点后两位数字,也就是指定了保留小数点位数。5指定占位符宽度(不超过右对齐,超过全部显示) print (Name:%1

58、0s Age:%8d Height:%8.2f%(Aviad,25,1.83)Name: Aviad Age: 25 Height: 1.836指定占位符宽度(左对齐) print (Name:%-10s Age:%-8d Height:%-8.2f%(Aviad,25,1.83)Name:Aviad Age:25 Height:1.83 7指定占位符(只能用0当占位符?) print (Name:%-10s Age:%08d Height:%08.2f%(Aviad,25,1.83)Name:Aviad Age:00000025 Height:00001.83 format格式化输出 格式化

59、字符串的函数str.format(),可谓威力十足。那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?它通过和.来代替%,看示例: 0,1.format(yubg,39) #这里的0和1表示的是位置索引yubg,39 ,.format(yubg,39) #位置索引也可以是为空yubg,39 1,0,1.format(yubg,39) #可以接受多个参数,位置可以无序39,yubg,39 Format的关键字参数: name,age.format(age=39,name=yubg)yubg,39 通过下标: p=yubg,39 00,01.format(p)yubg,39p1=yubg,

60、39p2=22.3710,11.format(p1,p2)格式限定符: 它有着丰富的的“格式限定符”(语法是中带:号),比如:填充与对齐,填充常跟对齐一起使用:、 分别是居中、左对齐、右对齐,后面带宽度: 后面带填充的字符,只能是一个字符,不指定默认空格填充 :8.format(189) #默认是空格来占位,要显示的内容靠右对齐 189 :08.format(189) #用0来占位00000189 :a :*7.format(189)#用*来占位,共显示7位,要显示内容居中*189*精度与类型f:精度常跟类型f一起使用 :.2f.format(321.33345)#保留两位有效数字321.33

温馨提示

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

评论

0/150

提交评论