python模块之collections random
Posted liuzz07
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python模块之collections random相关的知识,希望对你有一定的参考价值。
collections
在内置数据类型(list, dict, tuple, set)的基础上,collections提供了几个额外的数据类型: Counter, deque, Orderdict, defultdict, namedtuple等
1. namedtuple: 生成可以通过名字访问的元组,类似之前的结构化时间
2. deque: 双向队列
3. Counter: 计数器
4. OrderDict: 有序字典
5. defaultdict: 带有默认值的字典
nametuple
我们要描述一个长方体,就可以用namedtuple
1 from collections import namedtuple 2 3 cube = namedtuple("cube", ["length", "width", "height"]) 4 c1 = cube(5, 4, 3) 5 print(c1) # cube(length=5, width=4, height=3) 6 print(c1.length) # 5 7 print(c1.height) # 3
deque
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,deque类似于列表,也有append, pop等方法
from collections import deque q = deque(["a", "b", "c"]) print(q) # deque([‘a‘, ‘b‘, ‘c‘]) # 添加 q.append("d") # 默认从右边添加 print(q) # deque([‘a‘, ‘b‘, ‘c‘, ‘d‘]) q.appendleft("e") print(q) # deque([‘e‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘]) # 删除 q.pop() # 默认从右边删,不能指定元素删 print(q) # deque([‘e‘, ‘a‘, ‘b‘, ‘c‘]) q.popleft() # 默认从左边删 print(q) # deque([‘a‘, ‘b‘, ‘c‘]) # q.pop("b") # TypeError: pop() takes no arguments (1 given) print(q.count("a")) # 1 q.remove("b") # 指定元素删 print(q) # deque([‘a‘, ‘c‘])
OrderDict
使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderDict,不过python3.6版本以后字典已经是有序的了,所以这个已经用处不大了。注意这里的key有序是指key按照创建字典或插入值的顺序来排
from collections import OrderedDict od = OrderedDict() od[1] = "a" od[2] = "b" od[3] = "c" print(od) # OrderedDict([(1, ‘a‘), (2, ‘b‘), (3, ‘c‘)])
defaultdict
来看一个例子:有如下值集合 [
11
,
22
,
33
,
44
,
55
,
66
,
77
,
88
,
99
,
90.
..],将所有大于
66
的值保存至字典的第一个key中,将小于
66
的值保存至第二个key的值中。
原生字典解决办法
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90] dic = dict() for i in l1: if i > 66: if "k1" not in dic: dic["k1"] = [] dic["k1"].append(i) elif i < 66: if "k2" not in dic: dic["k2"] = [] dic["k2"].append(i) print(dic) # {‘k2‘: [11, 22, 33, 44, 55], ‘k1‘: [77, 88, 99, 90]}
defaultdict解决办法
from collections import defaultdict l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90] dd = defaultdict(k1=[], k2=[]) # print(dd) # defaultdict(None, {‘k1‘: [], ‘k2‘: []}) for i in l1: if i > 66: dd["k1"].append(i) elif i < 66: dd["k2"].append(i) print(dd) # defaultdict(None, {‘k1‘: [77, 88, 99, 90], ‘k2‘: [11, 22, 33, 44, 55]})
Counter
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似
from collections import Counter lst = [1, 2, 3, 3, 2, 4, 5, 3, 1, 0, 0] print(Counter(lst)) # Counter({3: 3, 1: 2, 2: 2, 0: 2, 4: 1, 5: 1}) s = "afshkfhsdjhfakjhsdhajkd" print(Counter(s)) # Counter({‘h‘: 5, ‘a‘: 3, ‘f‘: 3, ‘s‘: 3, ‘k‘: 3, ‘d‘: 3, ‘j‘: 3})
以上是关于python模块之collections random的主要内容,如果未能解决你的问题,请参考以下文章