博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
collections系列功能介绍
阅读量:6345 次
发布时间:2019-06-22

本文共 2958 字,大约阅读时间需要 9 分钟。

collections模块是python2.7.3之后新加的功能。

查看collections模块中某个方法的使用说明

1
2
3
>>> 
import 
collections
>>> help(collections)
>>> help(collections.Counter)

1.1、计数器(Counter)

功能:Counter是对字典类型的补充,用于追踪值的次数

ps:具备字典的所有功能 + 自己的功能

1
2
3
4
>>> 
import 
collections
>>> c1=collections.Counter(
'asdasdf'
)
>>> print c1
Counter({
'a'
: 2, 
's'
: 2, 
'd'
: 2, 
'f'
: 1})

1.2、c.update(d):将c、d两个计数器相加

1
2
3
4
5
6
7
8
9
>>> c = collections.Counter(
'aabc'
)
>>> c
Counter({
'a'
: 2, 
'c'
: 1, 
'b'
: 1})
>>> d=collections.Counter(
'aab'
)
>>> d
Counter({
'a'
: 2, 
'b'
: 1})
>>> c.update(d)
>>> c
Counter({
'a'
: 4, 
'b'
: 2, 
'c'
: 1})

1.3 clear()  清空计数器

1
2
3
4
5
>>> c
Counter({
'a'
: 4, 
'b'
: 2, 
'c'
: 1})
>>> c.
clear
()
>>> c
Counter()

2. 有序字典(OrderedDict):

1
功能:orderedDict是对字典类型的补充,他记住了字典元素的添加顺序

我们知道字典是无序的,列表是有序的,OrderedDict方法原理就是将字典赋值时的key按顺序保存到一个列表中,例如list=[k1,k2,k3,...]。最后将字典的值按key的顺序调用出来

1
2
3
4
5
6
o1 = collections.OrderedDict()
o1[
'k1'
] = 1
o1[
'k2'
] = 2
o1[
'k3'
] = 3
>>> o1
OrderedDict([(
'k1'
, 1), (
'k2'
, 2), (
'k3'
, 3)])

3、默认字典(defaultdict)

功能:为字典中的values设置一个默认的类型,可以为列表,元组或者字典

例如:

1
2
3
4
>>> my_dict = collections.defaultdict(list)
>>> my_dict[
'k1'
].append(1)
>>> my_dict
defaultdict(<
type 
'list'
>, {
'k1'
: [1]})

这里由于定义了默认values的类型为list,所以后面才能使用append方法,往列表赋值

默认字典2:上面的例子还可以这样写

1
2
3
4
5
>>> dic = {}
>>> dic[
'k1'
] = []
>>> dic[
'k1'
].append(1)
>>> dic
{
'k1'
: [1]}

示例:

有一个列表list1=[11,22,55,66,77,90],将该列表中大于66的值放在字典dict1的k2中,其他的值放在k1中

使用默认字典,这样写:

1
2
3
4
5
6
7
8
9
10
11
>>> 
import 
collections
>>> list1=[11,22,55,66,77,90]
>>> dict1=collections.defaultdict(list)
>>> 
for 
value 
in 
list1:
...     
if 
value > 66:
...         dict1[
'k2'
].append(value)
...     
else
:
...         dict1[
'k1'
].append(value)
...
>>> dict1
defaultdict(<
type 
'list'
>, {
'k2'
: [77, 90], 
'k1'
: [11, 22, 55, 66]})

4、可命名元组(namedtuple):

根据namedtuple可以创建一个包含tuple所有功能以及其他功能的类型

需求:通常我们可以用元组表示x、y轴坐标,例如(1,4)但是我们事先约定好了1的位置表示x轴,4为y轴。加入事先没有约定x、y轴的位置,那么我们就不清楚哪个是x轴,哪个是y轴。那么我们如何定义一个元组,将x、y轴的值在元组中进行命名呢?

示例

1
2
3
4
>>> mytuple = collections.namedtuple(
'mytuple'
,[
'x'
,
'y'
])
>>> tuple1 = mytuple(1,2)
>>> tuple1
mytuple(x=1, y=2)

5、deque()双向队列

deque可以从队列两端添加和删除元素

1
2
3
4
5
6
7
8
9
10
11
12
>>> q = collections.deque()
>>> q.append(1)
>>> q.append(2)
>>> q.append(3)
>>> q
deque([1, 2, 3])
>>> q.pop()
3
>>> q.popleft()
1
>>> q
deque([2])

extend() 

扩展队列

1
2
3
4
5
>>> q
deque([2])
>>> q.extend(
'3'
)
>>> q
deque([2, 
'3'
])

extendleft()

从左边扩展队列

1
2
3
4
5
>>> q
deque([2, 
'3'
])
>>> q.extendleft(
'1'
)
>>> q
deque([
'1'
, 2, 
'3'
])

remove()

删除队列中的某个元素

1
2
3
>>> q.remove(2)
>>> q
deque([
'1'
'3'
])

6、Queue()单项队列

单项队列没有左右之分,但是有一个原则就是先进先出:FIFO(first in first out)与之相反的就是栈,先进后出,类似于弹夹的原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> 
import 
Queue
>>> q = Queue.Queue(10)
>>> q
<Queue.Queue instance at 0x1085c3878>
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> q
<Queue.Queue instance at 0x1085c3878>
>>> q.get()
1
>>> q.get()
2
>>> q.get()
3

本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1821985,如需转载请自行联系原作者
你可能感兴趣的文章
高版本SQL备份在低版本SQL还原问题
查看>>
一键安装最新内核并开启 BBR 脚本
查看>>
C# 绘制图表(柱状图,线性图,饼状图)
查看>>
.NET中使用Redis
查看>>
PHP 页面跳转的三种方式
查看>>
Juniper总结
查看>>
面试题目3:智能指针
查看>>
取消凭证分解 (取消公司下的多个利润中心)
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
[转] Mac下 快速写博客的软件 MarsEdit
查看>>
Unity的赛车游戏实现思路
查看>>
[Android UI] Shape详解 (GradientDrawable)
查看>>
边学边体验django--HttpRequest 对象
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
多态初步认识
查看>>