首页 > 代码库 > Python 学习日记第五篇 -- collections系列

Python 学习日记第五篇 -- collections系列

一、计数器(counter)

    计数器(counter)以字典的形式返回序列中各个字符出现的次数,值为key,次数为value

#!/usr/bin/env python
#-*- coding:utf-8 -*-

#导入collections模块
import collections

counter_test = collections.Counter("asfafjhadgkhjkgfjhgfjhaghdg")
print(counter_test)

#返回值
C:\Python27\python27.exe D:/cto3/day6/coun_1.py
Counter({‘g‘: 5, ‘h‘: 5, ‘a‘: 4, ‘f‘: 4, ‘j‘: 4, ‘d‘: 2, ‘k‘: 2, ‘s‘: 1})


  1、计数器的方法(字典方法略)

     counter是dict的子类,所有它拥有字典的所有方法,还有一些自己的方法

#取前3位的返回值
ret1 = counter_test.most_common(3)
print(ret1)
##########
result:[(‘g‘, 5), (‘h‘, 5), (‘a‘, 4)]

#循环取计数器中的值
for k,v in counter_test.items():
    print(k,v)
##########
result:
(‘a‘, 4)
(‘d‘, 2)
(‘g‘, 5)
(‘f‘, 4)
(‘h‘, 5)
(‘k‘, 2)
(‘j‘, 4)
(‘s‘, 1)

#update方法,subtract方法,更新与移除
obj = collections.Counter([11,22,33,22,])
print(obj)
obj.update([11,22,44])
print(obj)
obj.subtract([11,22,44])
print(obj)
##########
result:
Counter({22: 2, 33: 1, 11: 1})
Counter({22: 3, 11: 2, 33: 1, 44: 1})
Counter({22: 2, 33: 1, 11: 1, 44: 0})

 二、有序字典(orderedDict)

   有序字典(orderedDict)是字典的子类,在字典的基础上记录了元素添加的顺序

#导入collections模块
import collections

dic = collections.OrderedDict()
dic[‘k1‘] = ‘v1‘
dic[‘k2‘] = ‘v2‘
dic[‘k3‘] = ‘v3‘
print(dic)

##########
result:
OrderedDict([(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘)])

 1、有序字典的方法(字典的方法略)

#python3中新加入的方法,移动字典中的顺序
dic.move_to_end(‘k1‘)
print(dic)
##########
result:
OrderedDict([(‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘), (‘k1‘, ‘v1‘)])

#按照顺序,后进先出弹出元素(有返回值)
dic.popitem()
print(dic)
##########
result:
OrderedDict([(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘)])

#指定弹出的元素(有返回值)
dic.pop(‘k2‘)
print(dic)
##########
result:
OrderedDict([(‘k1‘, ‘v1‘), (‘k3‘, ‘v3‘)])

#更新,update方法
dic.update({‘k1‘:‘new1‘,‘k4‘:‘v4‘})
print(dic)
##########
result:
OrderedDict([(‘k1‘, ‘new1‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘), (‘k4‘, ‘v4‘)])

三、默认字典(defaultdict)

    默认字典与字典的区别是可设置其元素的类型

#导入collections模块
import collections

my_dict = collections.defaultdict(list)
my_dict[‘k1‘].append(‘v1‘)
print(my_dict)
##########
result:
defaultdict(<class ‘list‘>, {‘k1‘: [‘v1‘]})

 示例:

# 练习:元素分类
# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],
# 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
# 即: {‘k1‘: 大于66 , ‘k2‘: 小于66}

1、不用默认指点的写法要判断字典中是否已有{‘k1‘:[]}
all_list = [11,22,33,44,55,66,77,88,99,90,]
dic = {}
for i in all_list:
    if i > 66:
        if "k1" in dic.keys():
            dic[‘k1‘].append(i)
        else:
            dic[‘k1‘] = [i,]
    else:
        if "k2" in dic.keys():
            dic[‘k2‘].append(i)
        else:
            dic[‘k2‘] = [i,]

print(dic)

2、默认字典
all_list = [11,22,33,44,55,66,77,88,99,90,]
dic = collections.defaultdict(list)
for i in all_list:
    if i > 66:
        dic[‘k1‘].append(i)
    else:
        dic[‘k2‘].append(i)
print(dic)

##########
result:
defaultdict(<class ‘list‘>, {‘k2‘: [11, 22, 33, 44, 55, 66], ‘k1‘: [77, 88, 99, 90]})


四、可命名元祖(namedtuple)

  namedtuple与元组的区别是namedtuple创建了一个包含tuple和自己特定方法的类

#导入collections模块
import collections

# 创建了一个可命名元组的类
MytupleClass = collections.namedtuple(‘MytupleClass‘,[‘x‘,‘y‘,‘z‘])

# 创建对象,obj对象的x=11,y=22,z=33
obj = MytupleClass(11,22,33)
print(obj.x)
print(obj.y)
print(obj.z)

##########
result:
11
22
33


五、队列

1、双向队列

#导入collections模块
import collections
d = collections.deque(‘ghi‘)

常用方法:
#右加入
>>> d.append(‘j‘)
#左加入
>>> d.appendleft(‘f‘)
>>> d
deque([‘f‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘])

#右移除(有返回值)
>>> d.pop()
‘j‘
#左移除(有返回值)
>>> d.popleft()
‘f‘
>>> d
deque([‘g‘, ‘h‘, ‘i‘])

#队列可转换为列表
>>> list(d)
[‘g‘, ‘h‘, ‘i‘]

#右扩展
>>> d.extend(‘jkl‘)
>>> d
deque([‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘])
#左扩展(倒序加入队列)
>>> d.extendleft(‘abc‘)
>>> d
deque([‘c‘, ‘b‘, ‘a‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘])

#右轮换
>>> d.rotate(1)
>>> d
deque([‘l‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘])
#左轮换
>>> d.rotate(-1)
>>> d
deque([‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘])

#统计队列中元素出现的次数
>>> d.extend(‘ghijk‘)
>>> d
deque([‘g‘, ‘h‘, ‘i‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘])
>>> d.count(‘g‘)
2

#清除
>>> d.clear()

 2、单向队列(先进先出)

import queue
#创建单向队列
q = queue.Queue()

#插入第一条数据
q.put(‘123‘)
#插入第二条数据
q.put(‘456‘)
#查看队列中有几条数据
print(q.qsize())
#顺序取出第一条数据
print(q.get())
##########
result:
2
123


本文出自 “linux启航” 博客,请务必保留此出处http://jiayimeng.blog.51cto.com/10604001/1932093

Python 学习日记第五篇 -- collections系列