<python3-cookbook>第一章:数据结构和算法

第一章:数据结构和算法

介绍:这本书是高级用法,不是小白使用书
目的:写作目的是记录下自己学习这本书的过程以及收获

1.1解压序列赋值给多个变量:

问题:现在有一个包含 N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给 N 个变量?

解决方案:通过一个简单的赋值语句解压并赋值给多个变量。 唯一的前提就是变量的数量必须跟序列元素的数量是一样的。

1.2解压可迭代对象赋值给多个变量:

问题:如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError 。 那么怎样才能从这个可迭代对象中解压出 N 个元素出来?

解决方案:Python 的星号表达式可以用来解决这个问题

1.3保留最后N个元素:

问题:在迭代操作或者其他操作的时候,怎样只保留最后有限几个元素的历史记录?

解决方案:collections.deque

deque 类可以被用在任何你只需要一个简单队列数据结构的场合

1.4查找最大或最小的N个元素:

问题:怎样从一个集合中获得最大或者最小的 N 个元素列表?

解决方案:heapq 模块有两个函数:nlargest() 和 nsmallest() 可以完美解决这个问题

1.5实现一个优先级队列:

问题:怎样实现一个按优先级排序的队列? 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素

解决方案:利用 heapq 模块实现了一个简单的优先级队列:

1.6字典中的键映射多个值:

问题:怎样实现一个键对应多个值的字典(也叫 multidict)?

解决方案:使用 collections 模块中的 defaultdict 来构造这样的字典。 defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值,所以你只需要关注添加元素操作了

1.7字典排序:

问题:想创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序。

解决方案:使用 collections 模块中的 OrderedDict 类

1.8字典的运算:

问题:怎样在数据字典中执行一些计算操作(比如求最小值、最大值、排序等等)?

解决方案:对字典值执行计算操作,通常需要使用 zip() 函数先将键和值反转过来,然后结合max(), min(), sorted()方法实现

1.9查找两字典的相同点:

问题:怎样在两个字典中寻寻找相同点(比如相同的键、相同的值等等)?

解决方案:在两字典的 keys() 或者 items() 方法返回结果上执行集合操作

1.10删除序列相同元素并保持顺序:

问题:怎样在一个序列上面保持元素顺序的同时消除重复的值?

解决方案:如果序列上的值都是 hashable 类型,那么可以很简单的利用集合或者生成器来解决这个问题。

1.11命名切片:

问题:如果你的程序包含了大量无法直视的硬编码切片,并且你想清理一下代码。

解决方案:内置的 slice() 函数创建了一个切片对象。所有使用切片的地方都可以使用切片对象

1.12序列中出现次数最多的元素:

问题:怎样找出一个序列中出现次数最多的元素呢?

解决方案:collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了答案。

1.13通过某个关键字排序一个字典列表:

问题:有一个字典列表,想根据某个或某几个字典字段来排序这个列表。

解决方案:通过使用 operator 模块的 itemgetter 函数,可以非常容易的排序这样的数据结构。

1.14排序只支持原生比较的对象:

问题:你想排序类型相同的对象,但是他们不支持原生的比较操作。

解决方案:内置的 sorted() 函数有一个关键字参数 key ,可以传入一个 callable 对象给它, 这个 callable对象对每个传入的对象返回一个值,这个值会被 sorted 用来排序这些对象。

1.15通过某个字段将记录分组:

问题:你有一个字典或者实例的序列,然后你想根据某个特定的字段比如 date 来分组迭代访问。

解决方案:itertools.groupby() 函数对于这样的数据分组操作非常实用。

1.16过滤序列元素:

问题:你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列

解决方案:使用列表推导、使用生成器表达式迭代产生过滤的元素

1.17从字典中提取子集:

问题:你想构造一个字典,它是另外一个字典的子集。

解决方案:字典推导、通过创建一个元组序列然后把它传给 dict() 函数也能实现

1.18映射名称到序列元素:

问题:你有一段通过下标访问列表或者元组中元素的代码,但是这样有时候会使得你的代码难以阅读, 于是你想通过名称来访问元素。

解决方案:collections.namedtuple() 函数通过使用一个普通的元组对象来帮你解决这个问题

1.19转换并同时计算数据:

问题:你需要在数据序列上执行聚集函数(比如 sum() , min() , max() ), 但是首先你需要先转换或者过滤数据

解决方案:一个非常优雅的方式去结合数据计算与转换就是使用一个生成器表达式参数。

1.20合并多个字典和映射:

问题:现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。

解决方案:使用 collections 模块中的 ChainMap 类。一个 ChainMap 接受多个字典并将它们在逻辑上变为一个字典。

原文地址:https://www.cnblogs.com/1fengchen1/p/9593642.html

时间: 2024-10-11 10:41:52

<python3-cookbook>第一章:数据结构和算法的相关文章

第一章 &nbsp; &nbsp; &nbsp;数据结构和算法简介

数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并能被计算机程序处理的符号的总称. 数据结构是相互之间存在一种或多种特定关系的数据元素的结合. 数据结构=数据元素+关系(结构): 数据在计算机中的表示称为数据的储结构 任何一个算法的设计取决于选定的逻辑结构,而算法的实现依赖于采用的存储结构 程序=数据结构+算法 算法是对特定问题求解步骤的一种描述 算法的5大特性: 1)  有限性,算法必须在有限的步骤之后结束 2)  确定性,算法的每一步都是确定的定义,无二义性.即在任何条件下

第一章 数据结构与算法

1.1 算法 1.1.1 算法的基本概念 所谓算法是指解题方案的准确而完整的描述. 对于一个问题,如果可以通过一个计算机程序,在有限的存储空间内运行有限长的时间而得到的结果,则称这个问题是算法可解的. 但算法不等于程序,也不等于计算方法. 算法的基本特征: (1) 可行性(Effectiveness) 算法可行性包括以下两个方面: ①算法中的每一个步骤必须能够实现. ②算法执行的结果要能够达到预期的目的.  算法在执行过程中往往要受到计算工具的限制,使执行结果产生偏差. (2)确定性(Defin

NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译

NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译 第一章第二节Mapping a class with XML第一章第三节Creating class hierarchy mappings第一章第四节Mapping a one-to-many relationship第一章第五节Setting up a base entity class Handling versioning and concurrency

大数据就是这么任性第一季数据结构和算法(一线经验、权威资料、知识新鲜、实践性强、全程源码)

这门课程是针对大数据工程师和云计算工程师的基础课程,同时也是所有计算机专业人士必须掌握的一门课程. 如果不掌握数据结构和算法,你将难以掌握高效.专业的数据处理手段,更难以从容应对复杂的大数据处理场景. 请思考以下问题: 1.社交网站(如微博.facebook)中,人与人的关系是海量数据,你如何研究和处理此问题? 2.数据库的索引作用是什么?为什么利用哈希.B+树和堆表等数据结构来组织索引? 3.为什么Linux的虚拟内存管理模块,使用红黑树来处理VMA的查找? 4.为什么搜索引擎可以在毫秒级返回

程序员教程-4章-数据结构与算法

目录结构 4.1 线性结构 4.1.1 线性表 1 线性表的定义 2 线性表的存储结构 3 线性表的应用 4.1.2 栈和队列 1 栈 2 队列 4.1.3 串 1 串的定义及基本运算 4.2 数组 1 数组 2 矩阵 4.3 树与二叉树 4.3.1 树的基本概念 4.3.2二叉树 1 二叉树的性质 2 满二叉树和完全二叉树 3 二叉树的存储结构 4 二叉树的遍历 4.3.3 树和森林 1 树和森林与二叉树的相互转换 2 树和森林的遍历 4.3.4 最优二叉树 4.3.5 二叉查找树 4.4图

《大话数据结构》---第一章 数据结构绪论

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以前他们之间的关系和操作等相关问题的学科. 程序设计 = 数据结构 + 算法 数据:描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据元素:组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理.也被称为记录.数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位.数据对象:是性质相同的数据元素的集合,是数据的子集.(性质相同即具有相同数量和类型的数据项)数据结构:是

第一章 数据结构概论

1.1  什么是数据结构 在数据结构中数据之间的关系主要有两种:线性关系和非线性关系(非线性关系又分为树形关系和图形关系). 如上图:每个数据单位(一条学生记录)相邻的前一个数据单位最多只能有一个(第一个没有),相邻的后一个数据单位最多只能有一个(最后一条没有).这种数据单位的集合成为数据集合,这种数据之间的关系成为线性关系(这种数据文件就是一个线性表). 我们的电脑硬盘中的目录文件结构,是一个树形结构(树形关系),这种即是非线性的: 多台电脑之间互相通信的多对多的关系,属于非线性关系中的图关系

下载大数据就是这么任性第一季数据结构和算法(一线经验、权威资料、知识新鲜、实践性强、全程源码)

java语言实现,100多课下载地址:http://pan.baidu.com/s/1dFJUbp3现200转让了,联系QQ:380539674 一.简介第1讲:什么是数据结构?第2讲:什么是算法?二.线性表第3讲:线性表(数组.链表.队列.栈)第4讲:Linux work queue及JDK线程池三.树第5讲:非线性结构.树.二叉树第6讲:平衡树.AVL树第7讲:B+树与数据库索引四.图第8讲:图的概念与存储第9讲:图的遍历第10讲:最小生成树(MST).Prim算法.Kruskal算法第11

【python cookbook】【数据结构与算法】4.找到最大或最小的N个元素

问题:想在某个集合中找出最大或最小的N个元素 解决方案:heapq模块中的nlargest()和nsmallest()两个函数正是我们需要的. >>> import heapq >>> nums=[1,8,2,23,7,-4,18,23,42,37,2] >>> print(heapq.nlargest(3,nums)) [42, 37, 23] >>> print(heapq.nsmallest(3,nums)) [-4, 1, 2

第一章 数据结构绪论

本文章作为学习笔记,大量参考了<大话数据结构>这本书,因为没有用于商业活动,而且也算是为作者做了一个小小的宣传,作者应该不会告我侵权,哈. 数据结构的概念:是相互之间存在的一种或多种特定关系的数据元素的集合.(学了半天这个概念得知道吧!) 开场白 数据结构有什么用?如果你想走程序员的道路,如果你不想一辈子搬砖,如果你想比别人工资高百分之三十,如果你想让家人过上好日子,如果...  够现实了吧! 数据结构的起源 数据结构是程序员的炼狱,你经历了数据结构的"折磨"才能蜕变.数据