一、计数器(counter)
计数器(counter)以字典的形式返回序列中各个字符出现的次数,值为key,次数为value
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/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的子类,所有它拥有字典的所有方法,还有一些自己的方法
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#取前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)是字典的子类,在字典的基础上记录了元素添加的顺序
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#导入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、有序字典的方法(字典的方法略)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#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)
默认字典与字典的区别是可设置其元素的类型
|
1
2
3
4
5
6
7
8
9
|
#导入collections模块
import
collections
my_dict = collections.defaultdict(list)
my_dict[
'k1'
].append(
'v1'
)
print(my_dict)
##########
result:
defaultdict(<class
'list'
>, {
'k1'
: [
'v1'
]})
|
示例:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# 练习:元素分类
# 有如下值集合 [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和自己特定方法的类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#导入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、双向队列
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#导入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、单向队列(先进先出)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import
queue
#创建单向队列
q = queue.Queue()
#插入第一条数据
q.put(
'123'
)
#插入第二条数据
q.put(
'456'
)
#查看队列中有几条数据
print(q.qsize())
#顺序取出第一条数据
print(q.get())
##########
result:
2
123
|
本文转自 元婴期 51CTO博客,原文链接:http://blog.51cto.com/jiayimeng/1932093