数据结构与算法
Posted Python编程和AI科学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法相关的知识,希望对你有一定的参考价值。
数据结构与算法部分这是最后一节了,其实Python cookbook这本书当做一本工具书也不错,当需要什么知识点的时候翻到相应的章节查阅,基本能找到合适的解决办法或是相应的知识点,但是更详细的教程其实在官网,这本书主要的内容都是脱胎于官网,截取其中比较常用的,需要的注意的点拿出来重点讨论,所以从书本的内部看起来没有章法,没有一个完整的主题,所有的python的知识都是被分割成很多细节,看起来有些杂乱无章,但纵观全书,所有的知识点也都有覆盖到,所以此书没有深究整个项目的进程,但提到的相关标准库,函数用法,可以了解之后在详细学习相关感兴趣的内容,官网上有更全的相关教程。下面就开始这章的最后一节吧!
1.12如何对数据同时做转换和换算,首先对数据做转换或是筛选,然后再调用一个换算函数,比如:sum,min,max等。
使用生成器表达式能优雅的解决这个问题,比如计算一个列表的平方和,例子如下:
简单快捷。上面的代码执行过程为首先遍历列表的每个元素,并同时对每个元素计算平方值后,sum函数进行求和,一步就解决了。在看下面的列子:
运行结果如下:
首先说一下这里的listdir函数,这个函数是遍历给定的目录名字下的文件名或是目录名并输出,其他的什么也不做,比如:
这与我的此文件夹下的没有区别,图片太大,就不贴图了,比如这里的__pycache__就是一个文件目录名,里面也还有文件,所以listdir函数返回的是一个目录名称和文件名的对象。然后继续用if条件和字符串的endwith方法判断文件名字是否有‘.py’结尾的文件,如果有,则判断为python文件,打印“there be python ”。说到字符串方法,这里有一个方法要注意的就是join方法,下面是一个例子:
第二个出现异常,就是少了str函数,说明join方法只能用于字符串,有整数或是其他的数据类型就会出错。在前面我们讲过列表解析的内容,在这里不知道有没有发现,其实这里的几个例子中只用了一对括号,除去函数必须带的一对括号后没有了表达式解析的构造啊?这也是python的故意设计,再加上一对括号,中括号也能正常使用,转换为正真的元祖解析或是列表解析,python说这样的代码看起来太丑了,直接去掉,反正我要的是结果可以就好了,诚然,这样做计算数据量小的时候确实不错,但是在数据量很大的时候呢?表达式解析或创建一个巨大的数据结构,所以基于生成器的结局方法可以以迭代的方式转换数据,内存使用率较高。
另外很多换算函数比min和max,还有前面我们讲到排序函数sorted,他们都有一个关键字默认参数key。
1.13,将多个映射合并为单个映射,在多个字典或映射,在逻辑上将他们合并为一个单独的映射结构,以达到某些特定的目的,实现的代码详细如下:
运行结果如下:
这里的切片操作谁能操作,但实际上只能输出第一个字典的值,有点像集合的无重复元素一样,但其内部心的数据结构内部其实还是两个字典的键值对都存在,只不过在引用的时候的总是引用前面第一的值。所以在输出,在重新对y赋值时得到的结果也是第一个字典(也就是a)的值有变化。
所以在这里如果我们想更新一个字典,或者直接说把两个字典合并得到一个新的字典这种方法能使用,只不过需要注意引用的问题总是第一个,另外一个就是字典的update方法,例如:
结果如下:
这个方法跟collections包里ChainMan类不同的是,得到的真正的是一个集合的操作,就是说前面的键的值被后更新的字典相同键的值覆盖了,也就是更新了键值,而不是两个字典的键值对同时存在,所以各有优势,看各自所取。
以上是关于数据结构与算法的主要内容,如果未能解决你的问题,请参考以下文章