collections

在内置数据类型(list, dict, tuple, set)的基础上,collections提供了几个额外的数据类型: Counter, deque, Orderdict, defultdict, namedtuple等

1. namedtuple: 生成可以通过名字访问的元组,类似之前的结构化时间

2. deque: 双向队列

3. Counter: 计数器

4. OrderDict: 有序字典

5. defaultdict: 带有默认值的字典

nametuple

我们要描述一个长方体,就可以用namedtuple

 from collections import namedtuple

 cube = namedtuple("cube", ["length", "width", "height"])
c1 = cube(5, 4, 3)
print(c1) # cube(length=5, width=4, height=3)
print(c1.length) #
print(c1.height) #

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")) #
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})

Random

所有与随机的东西都在random模块中

def v_code():
"""
用于生成随机验证码
:return: None
"""
code = ''
for i in range(4):
num = random.randint(0, 9)
alf = chr(random.randint(65, 90))
add = random.choice([num, alf])
code = "".join([code, str(add)]) return code print(v_code()) # 0V28

python模块之collections random的更多相关文章

  1. python模块学习之random

    模块源码: Source code: Lib/random.py 文档:http://docs.python.org/2/library/random.html 常用方法: random.random ...

  2. python模块详解 random os

    random模块 常用方法 random.random() 随机产生一个小于1的浮点数 import random print(random.random()) #0.4153761818276826 ...

  3. python模块介绍- collections(5)-OrderedDict 有序字典

    1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary ...

  4. python模块之collections

    我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型: (1) ...

  5. Python模块学习笔记— —random

    Python中的random模块用于生成随机数. random.random 函数原型 random.random() 生成一个范围在[0,1)的随机浮点数. import random print ...

  6. python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块

    4.random -- 随机模块 a-z:97 ~ 122 A-Z :65 ~ 90 import random #浮点数 print(random.random())#0~1,不可指定 print( ...

  7. Python模块:collections

    collections模块常用的数据类型: (1)namedtuple(): #创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素. fr ...

  8. python模块之collections模块

    计数器 Counter 计数元素迭代器 elements() 计数对象拷贝 copy() 计数对象清空 clear() from collections import Counter #import ...

  9. 【转】python模块分析之collections(六)

    [转]python模块分析之collections(六) collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) pyth ...

随机推荐

  1. 【hihocoder1167】高等理论计算机科学 (重链剖分 +树状数组)

    Descroption 原题链接给你一棵\(~n~\)个点的树和\(~m~\)条链,求两两相交的链有多少对,两条链相交当且仅当有至少一个公共点.\(~1 \leq n, m \leq 10 ^ 5~\ ...

  2. Outsider(HNOI2019)

    这不是一篇退役记,因为NOIP2018之后就写完了. Day-1 清明时节雨纷纷. 最后的时光,应该是怎么样的呢? 是像水滴一样,悄无声息地从指缝中溜走 还是如火焰一般,燃烧着最后的留恋? 晚上一直在 ...

  3. 【HDU1848】Fibonacci again and again(博弈论)

    [HDU1848]Fibonacci again and again(博弈论) 题面 Hdu 你有三堆石子,每堆石子的个数是\(n,m,p\),你每次可以从一堆石子中取走斐波那契数列中一个元素等数量的 ...

  4. 「SCOI2015」小凸玩密室 解题报告

    「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...

  5. centos7系统排错

    系统排错 troubleshooting winPE --光盘或u盘启动盘 产生一个PE系统(类似内存上跑的临时系统) 系统排错 rescue 模式 (挽救模式) 类似windows winPE模式 ...

  6. Python3 与 C# 面向对象之~异常相关

      周末多码文,昨天晚上一篇,今天再来一篇: 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master 在线预览:http://github.les ...

  7. maven将项目及第三方jar打成一个jar包

    pom.xml中添加如下配置 把依赖包和自己项目的文件打包如同一个jar包(这种方式对spring的项目不支持) <build> <plugins> <plugin> ...

  8. spring中的@Bean是否一定要与@Configuration一起用

        版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/little_newBee/article/details/80383691 在使用sprin ...

  9. list根据某个字段去重

    方法一:使用Set List<User> newList = new ArrayList<User>(); Set<String> set = new HashSe ...

  10. Django(三)框架之第二篇

    https://www.cnblogs.com/haiyan123/p/7717788.html 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html ...