0.前置说明

  • 1.运行环境:Win7虚拟机、python2.7(anacoda版)
  • 2.本文大部分内容引用此参考文献并极力推荐根据此人博客学习python:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fa…

1.namedtuple

这个函数的意义在于创建一个容易让人理解的元组数据结构(tuple),

In [1]: from collections import namedtuple

In [2]: name = namedtuple(\'name\',[\'first\',\'second\'])

In [3]: n = name(\"Mr\",\"ZONT\")

In [4]: n.first
Out[4]: \'Mr\'

In [5]: n.second
Out[5]: \'ZONT\'

使用技巧以及注意事项

  • 注意namedtuple的第一个参数真的是表示这个结构的name(这个例子举的比较挫),请看以下代码,能更好理解.
In [14]: name = namedtuple(\'wahaha\',[\'first\',\'second\'])
In [15]: name.__name__
Out[15]: \'wahaha\'
  • 新建的tuple是原来tuple的子类
In [18]: n = name(\"Mr\",\"ZONT\")
In [19]: isinstance(n,name)
Out[19]: True
In [20]: isinstance(n,tuple)
Out[20]: True

deque

dequelist的进化版,可以在两头添加和删除元素,适合用于队列和栈。

In [21]: from collections import deque
In [22]: d = deque([\'r\', \'Z\', \'O\'])
In [24]: d.append(\'N\')
In [25]: d.appendleft(\'M\') #在最左侧添加元素
In [26]: d
Out[26]: deque([\'M\', \'r\', \'Z\', \'O\', \'N\'])
In [27]: d.append(\'T\')
In [28]: d
Out[28]: deque([\'M\', \'r\', \'Z\', \'O\', \'N\', \'T\'])
In [29]: d.pop()
Out[29]: \'T\'
In [30]: d
Out[30]: deque([\'M\', \'r\', \'Z\', \'O\', \'N\'])
In [31]: d.popleft() #弹出左侧的元素
Out[31]: \'M\'
In [32]: d
Out[32]: deque([\'r\', \'Z\', \'O\', \'N\'])

defaultdict

和传统的dict相比,当所选择的key不存在时,可以返回一个默认值。

In [33]: from collections import defaultdict
In [35]: d = defaultdict(lambda:\'NOKEY\')
In [36]: d[\'k\'] = 1
In [37]: d[\'k\']
Out[37]: 1
In [38]: d[\'d\']
Out[38]: \'NOKEY\'

使用技巧以及注意事项

  • 注意defaultdict里面的参数必须是以函数形式传入的,除了用上文的匿名函数还可以用普通函数,如:
In [39]: def test():
   ....:     return \"hello\"
   ....:
In [41]: d = defaultdict(test)
In [43]: d[\'l\']
Out[43]: \'hello\'

OrderedDict

OrderedDict比传统的dict的优越性在于,其key是有顺序的。

In [49]: o = OrderedDict([(\'100\',0),(\'10\',5),(\'X\',\'Z\')])
In [51]: o.keys()
Out[51]: [\'100\', \'10\', \'X\']

使用技巧以及注意事项

  • 注意OrderedDict的排序是根据输入的key的顺序进行排序。

Counter

Counter是一个简单的计数器,可用于统计字符出现个数等。

In [52]: from collections import Counter
In [54]: c = Counter(\'sdugvikbvqerhasasdasds\')
In [55]: c[\'a\']
Out[55]: 3
In [56]: c[\'d\']
Out[56]: 3
In [57]: c[\'s\']
Out[57]: 5