python之路(二)-collections系列
collections提供了一些比较方便的方法,使用时需要先导入模块
导入模块:
import collections
1. 计数器Counter
统计参数中出现的次数,以字典的方式返回结果,参数可以是字符串,列表,元祖等。 简单使用:
import collections
collections.Counter a = collections.Counter('aadfadfadfdfadfadfad')
print(a) #输出结果为:
Counter({'a': 7, 'd': 7, 'f': 6}) #统计一个字符串内每个字符出现的次数
b = collections.Counter(['abadfadfad','abc','abc','def',1243,121,121,124,124])
print(b)
#输出结果为: Counter({'abc': 2, 121: 2, 124: 2, 'abadfadfad': 1, 1243: 1, 'def': 1}) #统计一个列表内每个元素出现的次数
方法:字典有的方法它都有,并且还有自己独特的方法
__missing__
""" 对于不存在的元素,返回计数器为0 """
'The count of elements not in the Counter is zero.'
# Needed so that self[missing_item] does not raise KeyError
return 0
示例:
import collections
b = collections.Counter(['abadfadfad','abc','abc','def',1243,121,121,124,124])
print(b)
c = b.__missing__('abc')
print(c)
most_common
""" 按出现次数从大到小排序,列出低前n个,如果n超出总数范围,则列出所有元素 """
'''List the n most common elements and their counts from the most
common to the least. If n is None, then list all element counts.
示例:
import collections
b = collections.Counter(['abadfadfad','abc','abc','def',1243,121,121,124,124])
c = b.most_common(2) #打印出现次数最多的前两位
print(c) #输出结果:
[('abc', 2), (121, 2)] d = b.most_common(100) #100超出了结果范围,所以打印全部
print(d) #输出结果
[('abc', 2), (121, 2), (124, 2), ('abadfadfad', 1), (1243, 1), ('def', 1)]
elements
""" 计数器中的所有元素,注:此处非所有元素集合,而是包含所有元素集合的迭代器 """
'''Iterator over elements repeating each as many times as its count.
示例:
import collections
b = collections.Counter(['abadfadfad','abc','abc','def',1243,121,121,124,124])
c = b.elements() #所有元素,有重复的会重复打印
d = list(c)
print(d) #输出结果:
['abc', 'abc', 'abadfadfad', 121, 121, 1243, 124, 124, 'def']
update(self, iterable=None, **kwds):
""" 更新计数器,其实就是增加;如果原来没有,则新建,如果有则加一 """
'''Like dict.update() but add counts instead of replacing them.
示例:
import collections
b = collections.Counter(['abadfadfad','abc','abc','def',1243,121,121,124,124])
#update之前
print(b)
b.update(['abc'])
b.update([1111111111111111])
#update之后
print(b) #输出结果:
#update之前
Counter({'abc': 2, 121: 2, 124: 2, 'abadfadfad': 1, 1243: 1, 'def': 1}) #update之后
Counter({'abc': 3, 121: 2, 124: 2, 'abadfadfad': 1, 1111111111111111L: 1, 1243: 1, 'def': 1})
subtract(self, iterable=None, **kwds):
""" 相减,原来的计数器中的每一个元素的数量减去后添加的元素的数量 """
'''Like dict.update() but subtracts counts instead of replacing them.
Counts can be reduced below zero. Both the inputs and outputs are
allowed to contain zero and negative counts. 示例:
如果相减的元素之前不存在,相减之后他的值为-1
import collections
b = collections.Counter(['abadfadfad','abc','abc','def',1243,121,121,124,124])
print(b)
b.subtract(['def'])
b.subtract(['aaa'])
print(b) #输出结果:
#相减之前
Counter({'abc': 2, 121: 2, 124: 2, 'abadfadfad': 1, 1243: 1, 'def': 1}) #相减之后的结果:
Counter({'abc': 2, 121: 2, 124: 2, 'abadfadfad': 1, 1243: 1, 'def': 0, 'aaa': -1})
copy(self):
""" 拷贝 """
'Return a shallow copy.'
示例:
import collections
b = collections.Counter(['abadfadfad','abc','abc','def',1243,121,121,124,124])
print(b)
c = b.copy()
print(c) #输出结果:
Counter({'abc': 2, 121: 2, 124: 2, 'abadfadfad': 1, 1243: 1, 'def': 1})
Counter({'abc': 2, 121: 2, 124: 2, 'abadfadfad': 1, 1243: 1, 'def': 1})
2. 有序字典 OrderedDict
我们知道字典默认是无序的,如果我们在想使用有序的字典,那么就可以用collections的OrderedDic函数,可以得到一个有序的字典。 创建一个有序字典:
import collections
dic = collections.OrderedDict({'a':1,'b':2})
print(dic) #输出结果:
OrderedDict([('a', 1), ('b', 2)]) #无论执行多少次,这个结果的顺序永远不变
OrderedDict有序字典的创建原理其实就是python内部将key创建为一个列表,然后循环这个列表,去取对应的value值因为列表是有序的,所以读到的value也是有序的。
OrderedDict可以使用字典的所有方法,除此之外它还有自己特有的方法:
popitem 拿走最后一个元素,并return该元素的key和value,后进先出 类似内存的栈,
示例:
import collections
dic = collections.OrderedDict({'a':1,'b':2})
dic2 = dic.popitem()
#打印dic剩下的元素
print(dic)
#打印return得到的元素
print(dic2) #输出结果:
#剩下的语速
OrderedDict([('a', 1)]) #return得到的元素内容
('b', 2)
pop 拿走后返回值,参数为key,返回的值为value。如果参数不存在,会报错。
这个跟popitme的区别是popitem只能从最后一个元素删除,pop必须指定元素的key来删除,popitem返回的是key和value,pop返回的是vaule
示例:
import collections
dic = collections.OrderedDict({'a':1,'b':2})
dic2 = dic.pop('a')
print(dic)
print(dic2) #输出结果:
#pop后剩余的元素,此处返回的是key和value
OrderedDict([('b', 2)]) #pop返回的内容(返回的是一个vaule值)
1
setdefault 设置某一个k的默认值
与默认字典的区别,默认字典是给字典内所有的key设置了一个默认值,而setdefault是给某一个key设置了默认值。
import collections
dic = collections.OrderedDict({'a':1,'b':2}) dic.setdefault('c','Default')
print(dic) dic['c'] = 3
print(dic) #输出结果:
#给c设置了一个默认值Default
OrderedDict([('a', 1), ('b', 2), ('c', 'Default')]) #赋值之后c的值变成了3,而不是Default
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
update 如果k存在,修改为最新的值,如果不存在添加新的k和v 示例:
import collections
dic = collections.OrderedDict({'a':1,'b':2})
#b存在,执行了修改
dic.update({'b':100}) #c不存在,执行了添加
dic.update({'c':200}) print(dic) #输出结果:
OrderedDict([('a', 1), ('b', 100), ('c', 200)])
3.可命名元祖 namedtuple
自定义tuple,适用于类似坐标轴的场景,可以通过坐标轴取值,而不是下标取值
示例:
import collections
mytuples = collections.namedtuple('mytuples',['x','y','z'])
l2 = mytuples(1,2,3) #通过以下方法取x,y,z的值
print(l2.x)
print(l2.y)
print(l2.z)
4. 队列 deque
一个线程安全的双向队列
既然是双向队列,就是可以在任何位置写入和提取。
队列与栈的区别:
单向队列:先进先出
栈:后进先出
deque的常用方法:
append,appendletf(体现了双向队列的特性)
import collections
q1 = collections.deque(['a','b','c'])
q1.append('d')#默认往右侧追加
q1.appendleft([1])#往左侧追加
print(q1) #输出结果
deque([[1], 'a', 'b', 'c', 'd'])
clear 清空
import collections
q1 = collections.deque(['a','b','c'])
q1.clear()
print(q1) #输出结果:
deque([])
count 统计某个元素出现的次数
import collections
q1 = collections.deque(['a','b','c','a']) #统计a出现的次数
q2 = q1.count('a')
print(q2) #输出结果
2
extend extendleft 左右扩展(体现了双向队列特性)
import collections
q1 = collections.deque(['a','b','c','a'])
q2 = [1,2,3,4,5]
q3 = ['d','e','f']
q1.extend(q2) #默认在右侧扩展
q1.extendleft(q3)#在左侧扩展
print(q1) 输出结果:
deque(['f', 'e', 'd', 'a', 'b', 'c', 'a', 1, 2, 3, 4, 5])
pop 删除元素默认从右边删除,并返回删除的元素(体现了双向队列特性)
import collections
q1 = collections.deque(['a','b','c'])
q2 = q1.pop()
print(q1)
print(q2) #输出结果:
#删除了右侧的元素
deque(['a', 'b'])
#并返回了删除的元素
c
popleft 从左侧开始删除,并返回删除的元素(体现了双向队列特性)
import collections
q1 = collections.deque(['a','b','c'])
q2 = q1.popleft()
print(q1)
print(q2) #输出结果:
#删除了右侧的元素
deque(['b', 'c'])
#并返回了删除的元素
a
remove 删除某元素
import collections
q1 = collections.deque(['a','b','c'])
q1.remove('a')
print(q1) #输出结果:
deque(['b', 'c'])
revers 反转
import collections
q1 = collections.deque(['a','b','c'])
print(q1)
q1.reverse()
print(q1) #输出结果:
#反转前的结果
deque(['a', 'b', 'c'])
#反转后的结果
deque(['c', 'b', 'a'])
rotate 把后面的数据拿到第一位
相当于把元素连接成一个圆圈,依次把最后一位拿到第一位,其他元素顺势往后排。
import collections
q1 = collections.deque(['a','b','c'])
print(q1)
q1.rotate(2) #可以将元素旋转2次,或者更多次
print(q1) #输出结果:
#旋转前的结果
deque(['a', 'b', 'c'])
#旋转后的结果
deque(['b', 'c', 'a'])
5、 单向队列 queue.Queue 先进先出
常用方法:
定义队列:
import queue
q1 = queue.Queue(2) #这里的2是指队列里个元素个数
empty 如果队列是空的则打印True否则打印False
import queue
q1 = queue.Queue()
print(q1.empty()) #输出结果:
True
import queue
q1 = queue.Queue()
q1.put('a')
print(q1.empty())
#输出结果:
#此时队列不为空所以返回False False
full
前面说了可以在定义队列的时候确定队列内元素的个数,如果队列元素个数等于队列设置的个数则为True,反之则为False
示例:
import queue
q1 = queue.Queue(2)
q1.put('a')
q1.put('b')
print(q1.full()) #输出结果
True
get 取出队列中的元素,并返回删除的元素,类似于pop
示例:
import queue
q1 = queue.Queue()
q1.put('a') #先放进a
q1.put('b') #然后放进b
print(q1.qsize())
q2 = q1.get()
print(q1.qsize())
print(q2) #输出结果:
# 取出前队列的个数
2
#取出后队列的个数
1
#取出的队列元素,此处取出的是a
a
上例中,先进把a放进序列然后再把b放进序列,但是取出的时候是先取的a,这就说明了单向队列的特性:先进先出
put 将元素加入队列
qsize 统计元素的个数
python之路(二)-collections系列的更多相关文章
- python之路二十
一, $.ajax,这个是JQuery对ajax封装的最基础步,通过使用这个函数可以完成异步通讯的所有功能.也就是说什么情况下我们都可以通过此方法进行异步刷新的操作.但是它的参数较多,有的时候可能会麻 ...
- Python中模块之collections系列
collection系列功能介绍 1. 常用的集中类 1. Counter(计数器) 计数器的常用方法如下: 创建一个字典计数器 格式:collections.Counter(obj) 例如:prin ...
- python之路二十一
URL - 两个 Views - 请求的其他信息 from django.core.handlers.wsgi import WSGIRequest ...
- python之路二
.pyc是个什么鬼? 1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存 ...
- 2017年12月14日 一个Java开发的Python之路----------------(二)
说一个收获最大的,就是这个关闭流对象 之前写java读取文件的时候,最后往往要关闭流对象,以前我一直不明白,为什么,我不使用.close()方法,文件也可以读取成功,总感觉没有什么意义 原来是因为,这 ...
- Python之路系列笔记
备注:本套笔记内容来源于互联网,只做学习使用,如有侵权请联系本笔记作者. 资料内容 Python之路(一)——Python 初识 Python之路(二)——基础语法 Python之路(三)——函数 P ...
- Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...
- python之路:进阶 二
c = collections.Counter( Counter({ b = collections.Counter( b.update(c) Counter({ Counter({ ...
- Python之路【第十二篇】:JavaScrpt -暂无内容-待更新
Python之路[第十二篇]:JavaScrpt -暂无内容-待更新
随机推荐
- mybatis入门篇:通过SqlSession.selectList进行数据查询
作为一个java菜鸟,早就从慕课网中学到一些基本的mybatis的用法,但是一直不成体系,懵懵懂懂,既然正式入了java这个坑,就打算好好学学,所以买了本<MyBatis从入门到精通>,在 ...
- show出相应单据列表
var Fids=AddGroupItems.Select(o=>Convert.ToString(o["Id"])).ToArray(); string filter=st ...
- 了解各种不同意义上的new
问题1:请说明new operator 和 operator new的差异? 1.new operator : 一般我们写代码的时候,例如:String *p = new String(&quo ...
- Selenium WebDriver 对Cookie进行处理绕过登录验证码
首先需要手动登录一次你的测试网站,去Chrome的F12中获取这个网站的cookie信息,找到对应的保存登录信息的cookie,接下来在代码中将上述的cookie信息通过webdriver写入的自动化 ...
- python--第九天总结
python 多进程和多线程 多线程可以共享全局变量,多进程不能.多线程中,所有子线程的进程号相同:多进程中,不同的子进程进程号不同. [多进程] Python在2.6引入了多进程的机制,并提供了丰富 ...
- JS数组存储(两个数组相等,一个改变,另一个跟着改变)
数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的实际的数组元素被存储在堆(heap)内存中:数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中. ...
- ORACLE查询内存溢出
首先我们来看一个带排序的查询,点击工具栏的显示包含实际的执行计划. 1 SELECT * FROM AdventureWorks2008R2.Person.Person WHERE FirstName ...
- MAC shell ps 命令详解(转)
ps命令为我们提供了一次性的查看进程结果,它所提供的查看结果不是动态连续的:如果想对进程时间监控,应该用top工具 Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当 ...
- mysql-8.0.15-winx64 解压版安装 图文详解
1.官网下载 https://dev.mysql.com/downloads/mysql/ 2.解压到合适的目录 3.配置环境变量 ①. path ②.MYSQL_HOME 4.新建一个my.ini ...
- 符合Chrome58的证书制作
Chrome 58开始取消了对通用名检查的支持, 但网上大多数OpenSSL使用教程没有提及这一点, 制作出的证书总是提示ERR_CERT_COMMON_NAME_INVALID 错误, 所以分享出解 ...