namedtuple
-
namedtuple用来创建一种自定义的tuple对象,并且规定tuple元素的个数。并且用属性而不是用索引来引用tuple的某个元素。这样,用namedtuple可以很方便地定义一种数据类型
#创建 from collections import namedtuple Point = namedtuple('Point',['x','y']) #使用 p = Point(1,2) print(p.x) print(isinstance(p,point) print(isinstance(p,tuple) #打印结果 1 True True #同样的,用坐标和半径表示一个圆 Circle = namedtuple('Circle',['x','y','r']
deque
-
在数据量大的情况下,使用列表插入和删除比较慢。使用deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈。
集合除了支持append,pop,还支持appendleft,popleft
from collections import deque q = deque(['a','b','c']) q.append('x') q.appendleft('y') print(q) #打印结果 deque(['y', 'a', 'b', 'c', 'x'])
defaultdict
使用字典的时候,如果引用的key不在,会报出KeyErorr。如果希望key不存在时返回一个默认值,可以使用defaultdict。
from collections import defaultdict
dict1 = defaultdict(lambda:'N/A')
dict1['key1'] = 'aa'
print(dict1['key1']
print(dict1['key2']
#打印结果
'aa'
'N/A'
注意的是,返回值是通过函数返回的,而函数在创建defaultdict对象时导入
OrderedDict
使用dict时,key是无序的。要保持dict的顺序,可以用OrderedDict
但要注意的是,OrderedDict并不是按照key的属性来排序的,而是按照输入顺序去排序的
from collections import OrderedDict
dict1 = dict([('a', 1), ('b', 2), ('c', 3)])
order_dict1 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(dict1)
print(order_dict1)
#打印结果
{'a': 1, 'c': 3, 'b': 2}
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
Counter
Counter是一个简单的计数器
from collections import Counter
c = Counter()
for ch in 'programming':
c[ch] = c[ch]+1
print(c)
#打印结果
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})
c.update('hello')
print(c)
Counter({'r': 2, 'o': 2, 'g': 2, 'm': 2, 'l': 2, 'p': 1, 'a': 1, 'i': 1, 'n': 1, 'h': 1, 'e': 1})
#打印结果