摘要: 场景:需要执行缩减函数(例如,sum(),min(),max()),但首先需要转换或过滤数据。 通常可以使用生成器表达式进行数据的过滤,sum,min,max的参数为iterable,而generator继承iterator,iterator继承iterable。故生成器表达式同样可以作为这些函数的 阅读全文
posted @ 2019-08-07 17:19 Jeffrey_Yang 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 通常列表或元组通过位置(索引)来访问元素,但这使得代码有时难以阅读。 通常我们希望通过按名称访问元素来减少对位置的依赖。 collections模块的namedtuple()函数(实际上是一个工厂方法)提供了一个tuple的子类,该类拥有tuple的常规操作,同时提供了按名称访问序列元素的能力。 命 阅读全文
posted @ 2019-08-07 16:16 Jeffrey_Yang 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 有时候,需要根据已知的字典对象构造一个新的字典对象。这种场景可以使用字典生成式(dictionary comprehension)。如下: 同样,也可以使用dict的构造函数,如下: 然而,使用字典生成式更清晰,实际运行速度要快得多(在示例中使用的字典上测试时速度快两倍)。 下面是另一种示例: 阅读全文
posted @ 2019-08-07 14:07 Jeffrey_Yang 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 序列中的数据,经常需要提取特定条件的数据,或减少序列中的数据。 常用的方式是使用列表生成式(list comprehension),如下: 有些时候,过滤条件比价复杂,难以使用简单的列表生成式或生成器表达式来过滤。比如说,过滤条件涉及到异常的处理或其他更复杂的情形。对于以上情况,我们可以将过滤条件的 阅读全文
posted @ 2019-08-07 11:25 Jeffrey_Yang 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 有一系列字典或实例,并且希望根据特定字段的值(例如日期)对分组(group)的数据进行迭代。 下面有一个子项为字典的序列(list),假如要根据日期(date)进行分组迭代: 在根据指定项分组之前,我们需要针对该项进行排序。排序后,相同指定项的为一组。 若只想将相同域的项合并到一个大的数据结构中,如 阅读全文
posted @ 2019-08-07 10:05 Jeffrey_Yang 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 假设有一组相同类的对象,类未实现本地比较。现在想根据类的某个属性进行排序。 常规的做法是用sorted方法的关键字参数key进行定制化比较,如下示例: 一个替代方案是可以使用operator模块的attrgetter函数,如下: 使用常规的lambda还是attrgetter依据个人偏好,但attr 阅读全文
posted @ 2019-08-06 16:37 Jeffrey_Yang 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 假如有一个list,其中每个子项都是一个dict,现在要根据dict中的公共键进行排序。 我们知道,sorted函数有一个关键字参数key,可以定制排序用到的算法。比如,我们有一个从数据库中获取到的一组用户,数据如下: 现在,我们想根据“fname”进行排序,我们可以编写如下的代码: 这是常规的代码 阅读全文
posted @ 2019-08-04 22:55 Jeffrey_Yang 阅读(245) 评论(0) 推荐(0) 编辑
摘要: collections模块有一个类,专门用于统计序列中各个元素出现的次数,叫做Counter。 Counter实际上是dict的一个子类。并提供了额外的一些专门用于统计次数的方法:most_common()。 Counter对象的一个很少被知道的特性是其实现了对象的相关数学操作,如下: 毋庸置疑, 阅读全文
posted @ 2019-08-04 22:26 Jeffrey_Yang 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 序列的一个常见操作就是通过切片提取有意义的数据片段进行处理,通常我们的做法时通过硬编码的形式[start, end, step]来定位数据。随着项目的规模不断变大,这种硬编码的方式会使整个项目变得难以维护。 此时,我们可以通过给切片进行命名,这样我们就不需要在每次提取给定数据时重新计算和核对切片位置 阅读全文
posted @ 2019-08-02 20:09 Jeffrey_Yang 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 在序列中,经常会碰到有重复项的情况,有时需要消除重复的项。 解决方案:使用set来构造无重复数据项类型。如: 使用set构造数据后,原始的序列元素失去了当初的相对顺序。同时简单的使用set会有另一个问题:可哈希。我们知道,像list中包含list或dict等复合类型且作为set的构造函数参数进行se 阅读全文
posted @ 2019-08-02 19:38 Jeffrey_Yang 阅读(229) 评论(0) 推荐(0) 编辑