问题:希望通过名称来访问元素,减少结构中对位置的依赖性 解决方案:使用命名元组collections.namedtuple()。它是一个工厂方法,返回的是python中标准元组类型的子类,提供给它一个类型名称以及相应的字段名称,它就返回一个可实例化的类,为你以定义好的字段名称传入值等。 命名元组的主 ...
分类:
编程语言 时间:
2016-08-08 00:37:22
阅读次数:
190
问题:提取出序列中的值或者根据某些标准对序列做删减 解决方案:列表推导式、生成器表达式、使用内建的filter()函数 1、列表推导式方法:存在一个潜在的缺点,如果输入数据非常大可能会产生一个庞大的结果,考虑到该问题,建议选择生成器表达式 2、生成器表达式方法: 3、如果筛选标准无法简单表示在列表推 ...
分类:
编程语言 时间:
2016-08-07 23:22:57
阅读次数:
162
问题:想创建一个字典,其本身是另一个字典的子集 解决方案:利用字典推导式(dictionary comprehension)可轻松解决 字典推导式的方案清晰且运行起来很快。 ...
分类:
编程语言 时间:
2016-08-07 23:15:34
阅读次数:
207
问题:想根据字典或者对象实例的某个特定的字典(比如日期)来分组迭代数据 解决方案:itertools.groupby()函数在对数据进行分组时特别有用(前提是先以目标字典进行排序) ...
分类:
编程语言 时间:
2016-08-07 23:02:42
阅读次数:
247
问题:想在同一个类的实例之间做排序,但是它们并不原生支持比较操作。 解决方案:使用内建的sorted()函数可接受一个用来传递可调用对象的参数key,sorted利用该可调用对象返回的待排序对象中的某些值来比较对象。 使用lambda表达式还是operator.attrgetter()或许只是个人偏 ...
分类:
编程语言 时间:
2016-08-07 21:40:44
阅读次数:
270
问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是为此类问题所设计的。它的一个非常方便的most_common()方法直接告诉你答案。 在底层实现中,Counter是一个字典,在元素和它们出现的次数间做了映射。 增加元素出现次数可以通过手动 ...
分类:
编程语言 时间:
2016-08-07 21:35:49
阅读次数:
197
问题:想根据一个或多个字典中的值来对列表排序 解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的。 补充说明: 有时候会利用lambda表达式来取代itemgetter()的功能:但是利用itemgetter()会运行的更快一些,所以考虑性能的话,应该使 ...
分类:
编程语言 时间:
2016-08-07 21:22:34
阅读次数:
173
问题:如何清理掉到处都是硬编码的切片索引 解决方案:对切片命名 假设有一些代码用来从字符串的固定位置中取出具体的数据(比如从一个平面文件或类似的格式:平面文件flat file是一种包含没有相对关系结构的记录文件): 与其这样做,倒不如对切片进行命名:避免了使用许多神秘难懂的硬编码索引,代码变得清晰 ...
分类:
编程语言 时间:
2016-08-07 19:56:30
阅读次数:
201
问题:在字典上对数据执行各式各样的计算(比如求最小值、最大值、排序)。 解决方案:利用zip()将字典的键-值对“反转”为值-键对序列。 例如:如下字典存放的股票名称和对应的价格: 进行这些计算时,请注意zip()创建了一个迭代器,它的内容只能消费一次。例如: 注意:当涉及(value,key)对的 ...
分类:
编程语言 时间:
2016-08-07 18:35:10
阅读次数:
176
问题:从序列中移除重复的元素,但仍然保持剩下的元素顺序不变 解决方案: 1、如果序列中的值时可哈希(hashable)的,可以通过使用集合和生成器解决。 2、如果序列时不可哈希的,想要去除重复项,需要对上述代码稍作修改: key参数的作用是指定一个函数用来将序列中的元素转化为可哈希的类型,如此可以检 ...
分类:
编程语言 时间:
2016-08-07 18:31:45
阅读次数:
167