python cookbook

一 .数据结构

  python collections包中

    deque :固定长度队列,(例如固定长度的cache什么的)

    defaultdict:如果每个键值不存在,默认返回值

    orderdict:有顺序的字典,按照插入的顺序,该结构内部维护了一个根据键插入顺序排序的双向链表。

    counter: 频率计算器,将一个列表冲出现的重复元素,组合成为{元素:频率}字典表,以及一些函数。 

    nametuple:命名记录,大量同样的字段的数据。可以根据字段名字查询值。

    ChainMap:将多个字典映射为一个统一操作

  heapq:排序的堆,

    nlargest:最大的n个数字

    nsmallest:最小的n个数字

    heapq.push,

    heapq.pop

  dict:字典

    zip:将多个列表合成多维tuple单个列表

    列表的keys(),items()支持集合运算

  list:列表

    slice:命名切片 slice(20, 23)

    sorted 函数: 其中的key可以传入callable对象,这个对象对每个value都返回一个值,供排序

      itemgetter:获取字典中的key对应值

      attrgetter:获取对象中的key对应值

    groupby 函数:

  itertools:迭代器

二.迭代器:

  a.迭代协议: 实现了__iter__()方法,且该方法返回一个实现了 __next__()方法的对象。 (严格来说迭代器只需要实现__iter__方法,不需要实现__next__方法。)

  b.常见的迭代器是如下:即该类本身就是可以迭代的。

class xxx
    def __iter__():
        return self
    def __next__():
        ...

  c.也可以通过__iter__实现代理迭代,这个时候是不需要__next__方法的。

#更加一般的迭代形式
class xxx
    def __iter__():
        return iter(某个实现了__next__的迭代对象或者是一个生成器)

  d.生成器:使用yield的函数,在系统内部被转变成为一个迭代器。生成器很简单明了。迭代器可以包含更多的数据,甚至可以将迭代过程数据给记录下来。因此迭代器具备普遍性,具备更多的功能。

  e.反向迭代:实现了__reversed__函数的类。

  f.迭代工具函数:

iter, #返回迭代对象 iter(迭代器,末尾值)

next, #返回下个迭代对象 next(迭代器)

enumerate,#重新构建一个迭代器,返回迭代对象与索引

zip,#重新构建一个迭代器,将多个迭代器组合成为一个新的迭代器,返回多个迭代器的值形成的tuple

islice:#给迭代器切片

dropwhile:#丢弃迭代器不需要的数据

permutations:#一个迭代器返回排列

combinations #一个迭代器返回组合

yield from #展开迭代器,跟iter()一样
原文地址:https://www.cnblogs.com/yasmi/p/5017126.html