博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python拓展2 collections模块与string模块
阅读量:7219 次
发布时间:2019-06-29

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

知识内容

1.collections模块介绍

2.collections模块使用

3.string模块介绍及使用

 

 

 

一、collections模块介绍

collections模块中提供了很多python的拓展数据类型,比如:ChainMap、Counter、deque、defaultdict、namedtuple、OrderedDict

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

  • namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
  • deque: 双端队列,可以快速的从另外一侧追加和推出对象
  • Counter: 计数器,主要用来计数
  • OrderedDict: 有序字典
  • defaultdict: 带有默认值的字典
  • ChainMap:为多个映射创建单一视图的类字典类型
  • UserDict:将字典包裹起来使得创建字典的子类更容易
  • UserList:将列表对象包裹起来使得创建列表的子类更容易
  • UserString:将字符串对象包裹起来使得创建字符串的子类更容易

 

 

 

二、collections模块使用

1.namedtuple

我们知道tuple可以表示不变集合,例如一个点的二维坐标可以表示为:

1 p = (1, 2)

但是我们怎么知道(1,2)是用来表示坐标而不是表示别的呢?为此去定义一个类有小题大做了,这时namedtuple就派上了用处

1 from collections import namedtuple2 3 Point = namedtuple('Point', ['x', 'y'])         # namedtuple('名称', [属性list])4 p = Point(1, 3)5 print(p.x)  # 16 print(p.y)  # 37 # 可以验证创建的Point是tuple的子类8 print(isinstance(p, Point))     # 输出True  9 print(isinstance(p, tuple))     # 输出True

 

 

2.deque

使用list来存储数据时,按索引访问元素很快,但是插入和删除元素就很慢,因为list是线性存储,数据量大的时候插入和删除的效率都很低

deque是为了高效实现插入和删除的双向队列,适合用于队列和栈

1 from collections import deque 2  3 q = deque(['a', 'b', 'c']) 4 q.append('x') 5 q.appendleft('y') 6 print(q)            # 输出: deque(['y', 'a', 'b', 'c', 'x']) 7  8 q.pop()             # 输出: deque(['y', 'a', 'b', 'c']) 9 print(q)10 q.popleft()11 print(q)            # 输出: deque(['a', 'b', 'c'])

 

 

3.defaultdict

使用dict时,如果引用的key不存在,就会抛出keyError,如果希望key不存在时,返回一个默认值,可以使用get方法,也可以使用defaultdict

1 from collections import defaultdict2 3 d = {
'k1': '123', 'k2': '666'}4 print(d.get('kkk', 0)) # 输出: 05 6 dd = defaultdict(lambda: 'N/A')7 dd['k1'] = 38 print(dd['k1']) # 输出: 39 print(dd['kkk']) # 输出: N/A

 

 

4.Counter

Counter是一个简单的计数器,例如统计字符的个数:

1 from collections import Counter2 3 c = Counter()4 for ch in "programming":5     c[ch] = c[ch] + 16 7 print(c)8 # 输出结果: Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})

 

 

5.ChainMap

ChainMap可接受多个映射然后在逻辑上使它们表现为一个单独的映射结构。这些映射在字面上并不会合并在一起。相反,ChainMap只是简单地维护一个记录底层映射关系的列表,然后重定义常见的字典操作来扫描这个列表

1 from collections import ChainMap 2  3 d1 = {
"k1": 1, "k2": 2} 4 d2 = {
"k2": 1, "k3": 2} 5 6 d = ChainMap(d1, d2) 7 print(d) 8 9 # 如果有重复的键则会采取第一个键的值:10 print(d["k1"])11 print(d["k2"])12 print(d["k3"])13 14 print(len(d))15 print(list(d.keys()))16 print(list(d.values()))

 

 

 

三、string模块介绍及使用

1.string模块介绍

python3中string模块提供了一系列的常量供我们使用,当我们需要生成随机验证码时可能会用到string模块

 

 

2.string模块使用

1 string.ascii_letters        -> 所有字母2 string.ascii_uppercase  -> 所有大写字母       3 string.ascii_lowercase   -> 所有小写字母4 string.digits                 -> 所有数字(0-9)5 string.punctuation        -> 所有符号6 string.hexdigits           -> 十六进制(0-F)7 string.octdigits            -> 八进制(0-7)8 string.printable           -> 所有可打印字符 9 string.whitespace        -> 空白字符

随机密码生成:

1 import string2 import random3 4 x = string.digits + string.ascii_letters + string.punctuation5 6 # random中的choice() -> 是从序列中任意选择一个元素7 pwd = ''.join([random.choice(x) for i in range(8)])8 print(pwd)

 

转载于:https://www.cnblogs.com/wyb666/p/8962583.html

你可能感兴趣的文章
Java - IO
查看>>
安卓app中嵌入一个H5页面,当手机系统设置字体变大时,如何使H5页面的字体不会随用户自己调整的系统字体变化而变化?...
查看>>
safari 收藏导出 手机safari 导出
查看>>
Dalvik 虚拟机 jvm 区别
查看>>
hexo从零开始
查看>>
币值转换
查看>>
RabbitMQ(六)远程连接
查看>>
得到ios设备的一些信息
查看>>
【教程】如何修改路由表?
查看>>
云计算与虚拟化之后:网络威胁成新挑战
查看>>
50个Demo展示HTML5无穷的魅力
查看>>
chapter 4:贪心
查看>>
批处理学习笔记
查看>>
Linux挂载磁盘
查看>>
Cyclone II RAM ROM设置
查看>>
Ubuntu下实现伪静态
查看>>
python 二维数组遍历
查看>>
第8周课下作业1(补)
查看>>
阿萨斯
查看>>
service启动和停止,绑定和解除绑定
查看>>