本篇博客主要就少Python常用模块collections中的几个常用方法,作为一种更高级的数据结构,这个模块提供了几个高效的方法来处理数据。
Counter用于统计元素个数,具体用法如下:
>>> from clooections import Counter as counter
>>> s = counter('aasasdasdfasdfg') # 统计每个元素个数
>>> s
Counter({'a': 5, 's': 4, 'd': 3, 'f': 2, 'g': 1})
>>> s.most_common(3) # 输出出现次数最多的三个元素
[('a', 5), ('s', 4), ('d', 3)]
>>> a = counter('asdfgh')
>>> s.update(a) # 统计结果进行加和
>>> s
Counter({'a': 6, 's': 5, 'd': 4, 'f': 3, 'g': 2, 'h': 1})
>>> b = counter('gghh')
>>> s.subtract(b) # 统计结果做减法,注:结果可为负
>>> s
Counter({'a': 6, 's': 5, 'd': 4, 'f': 3, 'g': 0, 'h': -1})
deque与list的用法类似,但可以更简单的实现复杂功能,list数据结构对于索引查询效率很高,但插入和删除会很慢,deque实现了双向列表,适合队列和栈。
>>> from collections import deque
>>> q = deque(['a','s','d','f','g','h'])
>>> q.pop()
'h'
>>> q
deque(['a', 's', 'd', 'f', 'g'])
>>> q.append('h')
>>> q
deque(['a', 's', 'd', 'f', 'g', 'h'])
>>> q.popleft() # 从左面pop元素
'a'
>>> q
deque(['s', 'd', 'f', 'g', 'h'])
>>> q.appendleft('a') # 从左面append元素
>>> q
deque(['a', 's', 'd', 'f', 'g', 'h'])
>>> q.extend([1,2,3])
>>> q
deque(['a', 's', 'd', 'f', 'g', 'h', 1, 2, 3])
>>> q.extendleft([3,2,1]) # 从左面扩展列表,注意倒序扩展
>>> q
deque([1, 2, 3, 'a', 's', 'd', 'f', 'g', 'h', 1, 2, 3])
>>> q.rotate(3) # 将右面三个元素附加到左面
>>> q
deque([1, 2, 3, 1, 2, 3, 'a', 's', 'd', 'f', 'g', 'h'])
为字典设置默认类型
people = [['male', 'winter'], ['female', 'elly'], ['male', 'frank'], ['female', 'emma']]
#将男性女性分开,所有男性放到'male'中,所有女性放放到'female'中
gender_sort = {}
for info in people:
if info[0] in gender_sort:
gender_sort[info[0]].append(info[1])
else:
gender_sort[info[0]] = [info[1]]
print(gender_sort) #结果{'male': ['winter', 'frank'], 'female': ['elly', 'emma']}
使用defaultdict,如下:
people = [['male', 'winter'], ['female', 'elly'], ['male', 'frank'], ['female', 'emma']]
gender_sort = collections.defaultdict(list)
for info in people:
gender_sort[info[0]].append(info[1])
print(gender_sort) #结果defaultdict(, {'male': ['winter', 'frank'], 'female': ['elly', 'emma']})