收藏 分销(赏)

Python电子62-组合数据类型.pptx

上传人:人****来 文档编号:10400690 上传时间:2025-05-26 格式:PPTX 页数:54 大小:474.71KB 下载积分:14 金币
下载 相关 举报
Python电子62-组合数据类型.pptx_第1页
第1页 / 共54页
Python电子62-组合数据类型.pptx_第2页
第2页 / 共54页


点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,第,6,节:,组合数据类型,字典类型的计算,列表是存储和检索数据的有序序列。当访问列表中元素时,可以通过整数的索引来查找它,这个索引是元素在列表中的序号,列表的索引模式是,“,查找,”,。,很多应用程序需要更灵活的信息查找方式,例如,在检索学生或员工信息时,需要基于身份证号码进行查找,而不是信息存储的序号。在编程术语中,根据一个信息查找另一个信息的方式构成了,“,键值对,”,,它表示索引用的键和对应的值构成的成对关系,即通过一个特定的键(身份证号码)来访问值(学生信息)。实际应用中有很多,“,键值对,”,的例子,例如:姓名和电话号码、用户名和密码、邮政编码和运输成本、国家名称和首都等。由于键不是序号,无法使用列表类型进行有效存储和索引。,字典类型的基本概念,通过任意键信息查找一组数据中值信息的过程叫映射,,Python,语言中通过字典实现映射。,Python,语言中的字典可以通过大括号,(),建立,建立模式如下:,:,:,:,其中,键和值通过冒号连接,不同键值对通过逗号隔开。,从,Python,设计角度考虑,由于大括号,可以表示集合,所以,字典类型也具有和集合类似的性质,即键值对之间没有顺序且不能重复。简单说,可以把字典看成元素是键值对的集合。下面是一个简单的字典,它存储国家和首都的键值对:,字典类型的基本概念,注意到,字典打印出来的顺序与创建之初的顺序不同,这不是错误。字典是集合类型的延续,所以各个元素并没有顺序之分。如果想保持一个集合中元素的顺序,需要使用列表,而不是字典。,字典类型的基本概念,字,典最主要的用法是查找与特定键相对应的值,这通过索引符号来实现。,Dcountry,中国,北京,一,般来说,字典中键值对的访问模式如下,采用中括号格式:,=,字典类型的基本概念,字典中对,某个键值的修改可以通过中括号的访问和赋值实现,例如:,Dcountry,中国,=,大北,京,print(Dcountry,),中国,:,大北京,法国,:,巴黎,美国,:,华盛顿,总,结起来,字典是存储可变数量键值对的数据结构,键和值可以是任意数据类型,包括程序自定义的类。,字典类型的基本概念,与列表相似,,Python,字典也有非常灵活的操作方法。使用大括号可以创建字典,并指定初始值。通过中括号可以增加新的元,素,字典类型的基本概念,直接使用大括号(,)可以创建一个空的字典,并通过中括号(,)向其增加元素,例如:,字典类型的基本概念,需要注意,尽管集合类型也用大括号表示,直接使用大括号(,)生成一个空的字典,而不是集合。生成空集合需要使用函数,set(),。,字典在,Python,内部也采用面向对象方式实现,因此也有一些对应的方法,采用,.(),格式,此外,还有一些函数能够用于操作字典,这些函数和方法如表,6.5,所示。,字典类型的基本概念,函数和方法,描述,.keys(),返回所有的键信息,.values(),返回所有的值信息,.items(),返回所有的键值对,.get(,),键存在则返回相应值,否则返回默认值,.pop(,),键存在则返回相应值,同时删除键值对,否则返回默认值,.popitem(),随机从字典中取出一个键值对,以元组,(key,value),形式返回,.clear(),删除所有的键值对,del,删除字典中某一个键值对,in,如果键在字典中返回,True,,否则返回,False,函数和方法,描述,.keys(),返回所有的键信息,.values(),返回所有的值信息,.items(),返回所有的键值对,字典类型的基本概念,上述方法的一些例子如下,如果希望,keys(),、,values(),和,items(),方法返回列表类型,可以采用,list(),函数将返回值转换成列表。,字典类型的基本概念,与其他组合类型一样,字典可以通过,forin,语句对其元素进行遍历,基本语法结构如下:,for in :,语句块,由于键值对中的键相当于索引,所以,,for,循环返回的变量名是字典的索引值。如果需要获得键对应的值,可以在语句块中通过,get(),方法获得。,字典类型的基本概念,字典是实现键值对映射的数据结构,它采用任意类型的键数据作为索引,十分灵活,具有处理任意长度、混合类型键值对的能力。为了更好地认识和使用字典,请理解如下一些基本原则:,字典是一个键值对的集合,该集合以键为索引,一个键信息只对应一个值信,息,字典中元素以键信息为索引访问;,字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。,字典类型的基本概念,jieba,库的使用,对于一段英文文本,例如,China is a great country,,如果希望提取其中单词,只需要使用字符串处理的,split(),方法即可,如下:,jieba,库的概述,然而,对于一段中文文本,例如,中国是一个伟大的国家,,希望获得其中的单词(不是字符)则十分困难,因为英文文本可以通过空格或者标点符号分割,而中文单词之间缺少分隔符,这是中文及类似语言独有的,“,分词,”,问题。上例中,分词能够将,中国是一个伟大的国家,分为,中国,、,是,、,一个,、,伟大,、,的,、,国家,等一系列词语。,jieba,库的概述,jieba,(,“,结巴,”,)是,Python,中一个重要的第三方中文分词函数库,例子如下。,import jieba,jieba.lcut(,中国是一个伟大的国家,),中国,是,一个,伟大,的,国家,jieba,库是第三方库,不是安装包自带,因此,需要通过,pip,指令安装,具体安装方法请参考,8.6,节。,pip,安装命令如下,:,jieba,库的概述,jieba,库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组。除了分词,,jieba,还提供增加自定义中文单词的功能。,jieba,库支持三种分词模式:精确模式,将句子最精确地切开,适合文本分析;全模式,把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;搜索引擎模式,在精确模式基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。,jieba,库的概述,jieba,库主要提供分词功能,可以辅助自定义分词词典。,jieba,库中包含的主要函数如表,所示,jieba,库的解析,函数,描述,jieba.cut(s),精确模式,返回一个可迭代的数据类型,jieba.cut(s,cut_all=True),全模式,输出文本,s,中所有可能单词,jieba.cut_for_search(s),搜索引擎模式,适合搜索引擎建立索引的分词结果,jieba.lcut(s),精确模式,返回一个列表类型,建议使用,jieba.lcut(s,cut_all=True),全模式,返回一个列表类型,建议使用,jieba.lcut_for_search(s),搜索引擎模式,返回一个列表类型,建议使用,jieba.add_word(w),向分词词典中增加新词,w,针对上述分词函数,举例如下,:,import jieba,jieba.lcut(,中华人民共和国是一个伟大的国家,),中华人民共和国,是,一个,伟大,的,国家,jieba.lcut(,中华人民共和国是一个伟大的国家,cut_all=True),中华,中华人民,中华人民共和国,华人,人民,人民共和国,共和,共和国,国是,一个,伟大,的,国家,jieba.lcut_for_search(,中华人民共和国是一个伟大的国家,),中华,华人,人民,共和,共和国,中华人民共和国,是,一个,伟大,的,国家,jieba,库的解析,jieba.lcut(),函数返回精确模式,输出的分词能够完整且不多余的组成原始文本;,jieba.lcut(,True),函数返回全模式,输出原始文本中可能产生的所有问题,冗余性最大;,jieba.lcut_for_search(),函数返回搜索引擎模式,该模式首先执行精确模式,然后再对其中长词进一步切分获得结果。由于列表类型通用且灵活,建议读者使用上述三个能够返回列表类型的分词函数。,jieba,库的解析,默认情况下,表,6.6,中,jieba.cut(),等,6,个分词函数能够较高概率识别自定义的新词,比如名字或缩写,例如,下例中本书作者的姓名不在词典中,但分词函数能够根据中文字符间的相关性识别为一个词。对于无法识别的分词,也可以通过,jieba.add_word(),函数向分词库添加,例子如下。,jieba,库的解析,import jieba,jieba.lcut(,嵩天老师在努力教学,Python,语言,),嵩天,老师,在,努力,教学,Python,语言,jieba.lcut(,习大大期盼有更好的教育,),习,大大,期盼,有,更好,的,教育,jieba.add_word(,习大大,),jieba.lcut(,习大大期盼有更好的教育,),习大大,期盼,有,更好,的,教育,jieba,库的解析,文本词频统计,在很多情况下,会遇到这样的问题:对于一篇给定文章,希望统计其中多次出现的词语,进而概要分析文章的内容。这个问题的解决可用于对网络信息进行自动检索和归档。在信息爆炸时代,这种归档或分类十分有必要。这就是“词频统计”问题。,从,思路上看,词频统计只是累加问题,即对文档中每个词设计一个计数器,词语每出现一次,相关计数器加,1,。如果以词语为键,计数器为值,构成,:,的键值对,将很好地解决该问题。这就是字典类型的优势。,文本词频统计,下面,采用字典来解决词频统计问题。该问题的,IPO,描述如下:,输入:从文件中读取一篇文章,处理:采用字典数据结构统计词语出现频率,输出:输出文章中最常出现的,10,个单词及出现次数,英文文本以空格或标点符号来分割词语,获得单词并统计数量相对容易,,6.6.1,节介绍统计英文文本词频的方法。中文字符之间没有天然的分隔符,需要对中文文本进行分词,,6.6.2,节介绍统计中文文本词频方法。,文本词频统计,Hamlet,,哈姆雷特,是莎士比亚的一部经典悲剧作品,讲述了,克劳狄斯叔叔谋害哈姆雷特父亲并篡取王位、哈姆雷特流浪在外并向叔叔复仇的故事。哈姆雷特也叫王子复仇记,代表着整个西方文艺复兴时期文学的最高成就,很多国内外电影都以这个故事为原型。,获取该故事的文本文件,保存为,hamlet.txt,。全文可以从网络上找到,或从本书提供的电子资源中获取。,文本词频统计,统,计,Hamlet,英文词频的第一步是分解并提取英文文章的单词。同一个单词会存在大小写不同形式,但计数却不能区分大小写。假设,Hamlet,文本由变量,txt,表示,可以通过,txt.lower(),函数将字母变成小写,排除原文大小写差异对词频统计的干扰。英文单词的分割可以是空格、标点符号或者特殊符号。为统一分隔方式,可以将各种特殊字符和标点符号使用,txt.replace(),方法替换成空格,再提取单词。,统,计词频的第二步是对每个单词进行计数。假设将单词保存在变量,word,中,使用一个字典类型,counts=,,统计单词出现的次数可采用如下代,码,countsword=countsword+1,文本词频统计,当遇到一个新词时,单词没有出现在字典结构中,则需要在字典中新建键值对:,countsnew_word=1,因此,无论词是否在字典中,加入字典,counts,中的处理逻辑可以统一表示为:,if word in counts:,countsword=countsword+1,else:,countsword=1,或者,这个处理逻辑可以更简洁的表示为如下代码:,countsword=counts.get(word,0)+1,文本词频统计,字典类型的,counts.get(word,0),方法表示:如果,word,在,counts,中,则返回,word,对应的值,如果,word,不在,counts,中,则返回,0,。,该实例的第三步是对单词的统计值从高到低进行排序,输出前,10,个高频词语,并格式化打印输出。由于字典类型没有顺序,需要将其转换为有顺序的列表类型,再使用,sort(),方法和,lambda,函数配合实现根据单词次数对元素进行排序。最后输出排序结果前,10,位的单词。,items=list(counts.items()#,将字典转换为记录列表,items.sort(key=lambda x:x1,reverse=True)#,以记录第,2,列排序,文本词频统计,采用函数对获取和整理文本进行封装,下面给出该实例的完整代码。,文本词频统计,运行程序后,输出结果如,右,:,the 1138,and 965,to 754,of,669,you 550,a 542,i 542,my 514,hamlet 462,in 436,观察输出结果可以看到,高频单词大多数是冠词、代词、连接词等语法型词汇,并不能代表文章的含义。进一步,可以采用集合类型构建一个排除词汇库,excludes,,在输出结果中排除这个词汇库中内容,具备这样功能程序的完整代码如下。,文本词频统计,文本词频统计,运行程序后,输出结果如下,to 754,hamlet 462,it 416,that 391,is 340,not 314,lord 309,his 296,this 295,but 269,文本词频统计,三国演义是中国古典四大名著之一,作者是元末明初的小说家罗贯中。该书描写了从东汉末年到西晋初年之间近,105,年的历史风云,以描写战争为主,反映了东汉末年的群雄割据混战和魏、蜀、吴三国之间的政治和军事斗争。,三国演义是一本鸿篇巨著,里面出现了几百个各具特色的人物。每次读这本经典作品都会想一个问题,全书这些人物谁出场最多呢?一起来用,Python,回答这个问题吧。,人物出场统计涉及对词汇的统计。中文文章需要分词才能进行词频统计,这需要用到,jieba,库。分词后的词频统计方法与,Hamlet,的英文词频统计方法类似。,三国演义人物出场统计,三国演义文本保存为:三国演义,.txt,。实现代码如下:,三国演义人物出场统计,先输出排序前,15,的单词,运行程序后,输出结果如下:,曹操,953,孔明,836,将军,772,却说,656,玄德,585,关公,510,丞相,491,二人,469,不可,440,荆州,425,玄德曰,390,孔明曰,390,不能,384,如此,378,张飞,358,三国演义人物出场统计,观察输出结果,似乎“曹操”是出场次数最多的人。然而,结果中出现了“玄德”、“玄德曰”,读者应该知道,“,玄德,”,的名字就是“刘备”。同一个人物会有不同的名字,这种情况需要整合处理。同时,与英文词频统计类似,需要排除一些人名无关词汇,如“却说”、“将军”等。进一步完善代码如下,其中,第,3,行增加了排除词库,excludes,,第,10,到,17,行增加了同一人物不同名字的处理。,三国演义人物出场统计,三国演义人物出场统计,三国演义人物出场统计,输出排序前,5,的单词,运行程序后,输出结果如下:,曹操,1451,孔明,1383,刘备,1252,关羽,784,张飞,358,三国演义人物出场统计,请感兴趣的读者可以继续完善程序,排除更多无关词汇干扰,总结出场最多的,20,个人物都有哪些。这里,给出参考答案,。,曹操(,1451,)、孔明(,1383,)、刘备(,1252,)、关羽(,784,)、张飞(,358,),吕布(,300,)、赵云(,278,)、孙权(,264,)、司马懿(,221,)、周瑜(,217,),袁绍(,191,)、马超(,185,)、魏延(,180,)、黄忠(,168,)、姜维(,151,),马岱(,127,)、庞德(,122,)、孟获(,122,)、刘表(,120,)、夏侯惇(,116,),三国演义人物出场统计,Python,之禅,什么样的程序是好的?如何编写漂亮的代码?这都是学习编程一段时间最经常提出的问题,却最难回答。程序设计语言如同自然语言,好的代码就像文学作品,不仅达意,更要优美。那什么是“好”?什么是“优美”?领悟编程代码优美的过程类似参禅,除了不断练习,也需要理解一些原则。,Python,之禅,Python,编译器以函数库的形式内置了一个有趣的文件,被称为“,Python,之禅”(,The Zen of Python,)。当调用如下一行语句后,会出现一段有趣的运行结果,。,import this,Python,之禅,Python,之,禅,Python,之禅,作者:,Tim Peters,优美胜于丑陋,明了胜于隐晦,简洁胜于复杂,复杂胜于凌乱,扁平胜于嵌套,间隔胜于紧凑,可读性很重要,即便假借特例的实用性之名,也不要违背上述规则,除非你确定需要,任何错误都应该有应对,当存在多种可能,不要尝试去猜测,只要你不是,Guido,,对于问题尽量找一种,最好是唯一明显的解决方案,做也许好过不做,但不假思索就动手还不如不做,如果你无法向人描述你的实现方案,那肯定不是一个好方案,如果实现方案容易解释,可能是个好方案,命名空间是绝妙的理念,要多运用,译者心得,以编写优美代码为目标,不多解释,优美代码应该清晰明了,规范统一,优美代码应该逻辑简洁,避免复杂逻辑,如果必须采用复杂逻辑,接口关系也要清晰,优美代码应该是扁平的,避免太多层次嵌套,优美代码间隔要适当,每行代码解决适度问题,优美代码必须是可读且易读的,上述规则是至高无上的,捕获异常,不让程序留有因错误退出的可能,不要试图给出多种方案,找到一种实现它,几乎所有人都没有,Guido,那么牛,编程之前要有思考,能说清楚的往往才是对的,适合复杂程序编程,除了,Python,之禅所表达的,Python,设计理念,该程序还有另一段魅力。请读者在,Python,安装目录中找到,Lib/this.py,文件,该程序内容如下:,Python,之禅,Python,之禅,该程序第,1,到,23,行是一个字符串,s,,但字符串并非是明文。将,s,转换成内容的代码从,25,行到,30,行。在这些代码中,可以看到字典、列表和元组类型,下面逐行来阅读这个代码的功能。,第,24,行定义了一个空字典,d,,第,26,行对字典,d,填充了内容,这个填充将,i+c,对应的字符替换为,(i+13)%26+c,,即将编号循环增加了,13,。,chr(65),代表字符,A,,,chr(97),代表字符,a,,因此,第,24,到,27,行建立了字母,a,到,z,和字母,A,到,Z,的一个,13,位循环移动的对应表,如下所示:,Python,之禅,密文:,A B C D E F G H I J K L M N O P Q R S T U V W X Y Z,原文:,N O P Q R S T U V W X Y Z A B C D E F G H I J K L M,密文:,a b c d e f g h i j k l m n o p q r s t u v w x y z,原文:,n o p q r s t u v w x y z a b c d e f g h i j k l m,Python,之禅,这,个算法可以看作是,3.5,节介绍的凯撒密码的一种扩展,相比凯撒密码,这个算法采用循环移动,13,个位置,直接好处是原文和密文之间的相互转换可以使用同一个程序,建议读者掌握这个算法,传递个小纸条、发个小消息就不怕被别人看懂了。,Python,之禅,本章主要介绍了组合数据类型中元组、数组、列表和字典等类型及基本操作,讲解了如何使用,jieba,词库对中文文档进行分词并进一步统计文档词频,最后利用,Python,之禅例子介绍编写好代码的基本原则。,本章小结,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服