08 2019 档案
摘要:查找 在字符串中匹配和搜索指定文本的常用方案是使用字符串的find, startswith, endswith等方法。如下示例: 对于更为复杂的匹配和搜索文本场景,通常需要使用正则表达式和re模块。值得注意的是,大多数正则表达式操作都可使用re模块级函数或编译的正则表达式对象(compiled re
阅读全文
摘要:问题 希望使用与在Unix shell中常用的相同通配符模式匹配文本(例如, .py,Dat [0 9] .csv等)。 方案 fnmatch模块提供了两个函数fnmatch和fnmatchcase。唯一的区别是是否区分字母大小写。示例如下: 此模块提供对Unix shell样式通配符的支持,这些通
阅读全文
摘要:有时我们需要将字符串拆分为字段,但分隔符(及其周围的间距)在整个字符串中不一致。即需要同时使用 多个分隔符以进行匹配。 str对象的split方法只能进行简单的字符串拆分,它的sep参数无法使用正则表达式进行模糊匹配。但re模块的split函数提供了正则表达式模式匹配,拆分字符串。示例如下: 使用r
阅读全文
摘要:多个字典或映射,希望在逻辑上将它们组合成单个映射以执行某些操作,例如查找值或检查键是否存在。 假如现在有两个字典对象a,b。 假如现在要检查某一键是否在其中一个字典对象中存在。首先检查a,若a中不存在,则检查b。可以使用collections模块的ChainMap类,如下: ChainMap采用多个
阅读全文
摘要:场景:需要执行缩减函数(例如,sum(),min(),max()),但首先需要转换或过滤数据。 通常可以使用生成器表达式进行数据的过滤,sum,min,max的参数为iterable,而generator继承iterator,iterator继承iterable。故生成器表达式同样可以作为这些函数的
阅读全文
摘要:通常列表或元组通过位置(索引)来访问元素,但这使得代码有时难以阅读。 通常我们希望通过按名称访问元素来减少对位置的依赖。 collections模块的namedtuple()函数(实际上是一个工厂方法)提供了一个tuple的子类,该类拥有tuple的常规操作,同时提供了按名称访问序列元素的能力。 命
阅读全文
摘要:有时候,需要根据已知的字典对象构造一个新的字典对象。这种场景可以使用字典生成式(dictionary comprehension)。如下: 同样,也可以使用dict的构造函数,如下: 然而,使用字典生成式更清晰,实际运行速度要快得多(在示例中使用的字典上测试时速度快两倍)。 下面是另一种示例:
阅读全文
摘要:序列中的数据,经常需要提取特定条件的数据,或减少序列中的数据。 常用的方式是使用列表生成式(list comprehension),如下: 有些时候,过滤条件比价复杂,难以使用简单的列表生成式或生成器表达式来过滤。比如说,过滤条件涉及到异常的处理或其他更复杂的情形。对于以上情况,我们可以将过滤条件的
阅读全文
摘要:有一系列字典或实例,并且希望根据特定字段的值(例如日期)对分组(group)的数据进行迭代。 下面有一个子项为字典的序列(list),假如要根据日期(date)进行分组迭代: 在根据指定项分组之前,我们需要针对该项进行排序。排序后,相同指定项的为一组。 若只想将相同域的项合并到一个大的数据结构中,如
阅读全文
摘要:假设有一组相同类的对象,类未实现本地比较。现在想根据类的某个属性进行排序。 常规的做法是用sorted方法的关键字参数key进行定制化比较,如下示例: 一个替代方案是可以使用operator模块的attrgetter函数,如下: 使用常规的lambda还是attrgetter依据个人偏好,但attr
阅读全文
摘要:假如有一个list,其中每个子项都是一个dict,现在要根据dict中的公共键进行排序。 我们知道,sorted函数有一个关键字参数key,可以定制排序用到的算法。比如,我们有一个从数据库中获取到的一组用户,数据如下: 现在,我们想根据“fname”进行排序,我们可以编写如下的代码: 这是常规的代码
阅读全文
摘要:collections模块有一个类,专门用于统计序列中各个元素出现的次数,叫做Counter。 Counter实际上是dict的一个子类。并提供了额外的一些专门用于统计次数的方法:most_common()。 Counter对象的一个很少被知道的特性是其实现了对象的相关数学操作,如下: 毋庸置疑,
阅读全文
摘要:序列的一个常见操作就是通过切片提取有意义的数据片段进行处理,通常我们的做法时通过硬编码的形式[start, end, step]来定位数据。随着项目的规模不断变大,这种硬编码的方式会使整个项目变得难以维护。 此时,我们可以通过给切片进行命名,这样我们就不需要在每次提取给定数据时重新计算和核对切片位置
阅读全文
摘要:在序列中,经常会碰到有重复项的情况,有时需要消除重复的项。 解决方案:使用set来构造无重复数据项类型。如: 使用set构造数据后,原始的序列元素失去了当初的相对顺序。同时简单的使用set会有另一个问题:可哈希。我们知道,像list中包含list或dict等复合类型且作为set的构造函数参数进行se
阅读全文
摘要:有两个字典对象,想要找出相同的元素(相同的键和值, key: value)。 a = {'x': 1, 'y': 2, 'z': 3},b = {'w': 10, 'x': 11, 'y': 2}。我们可以使用集合(set)里面的操作。 这些类型的操作也可用于更改或过滤字典内容。 例如,假设想要创建
阅读全文
摘要:字典对象(dict)是典型的键值映射对象,key: value。有时,我们会遇到这样的场景:提取字典对象中value最大或最小的键值对,或根据value的大小排序键值对。 为了获取股票价格最大或最小的元素,如果我们简单的使用max(prices)或min(prices),得到的结果是'IBM'或'A
阅读全文

浙公网安备 33010602011771号