Python攻城师的成长————模块突破(collections、time与datetime、random随机数模块)
今日学习目标:
- 学习并应用collections、time与datetime、random随机数模块知识
今日学习内容:
- collections模块
- time与datetime模块
- random随机数模块
内容详情:
collections模块
这个模块实现了特定目标的容器,以提供Python标准内建容器 dict、list、set、tuple 的替代选择。
内部方法官方介绍:
函数名 | 功能 |
---|---|
Counter | 字典的子类,提供了可哈希对象的计数功能 |
defaultdict | 字典的子类,提供了一个工厂函数,为字典查询提供了默认值 |
OrderedDict | 字典的子类,保留了他们被添加的顺序 |
namedtuple | 创建命名元组子类的工厂函数 |
deque | 类似列表容器,实现了在两端快速添加(append)和弹出(pop) |
ChainMap | 类似字典的容器类,将多个映射集合到一个视图里面 |
部分方法个人理解:
namedtuple
简介
具名元祖(加强版tuple),可以使tuple更加语义化
。之前我们写一个元祖tuple,对内部元素不能进行命名。往往我们并不知道一个元祖所要表达的意义,而namedtuple很好的解决了此问题。(可以变相地理解为字典化的元组)
语法结构
namedtuple('tuple_name', 'field_names')# tuple_name 元祖的名称,为字符串,返回一个元组子类,所以我们要对这个对象进行命名。 # field_name 元祖中元素的名称,通常是一个可迭代的数据,也可以是以逗号隔开的元素名称
用法举例
from collections import namedtupleperson = namedtuple('人物', 'name age gender') p1 = person('jason', 18, 'male') p2 = person('kevin', 28, 'female') print(p1, p2) print(p1.name, p1.age)''' # 执行结果 人物(name='jason', age=18, gender='male') 人物(name='kevin', age=28, gender='female') jason 18 '''
特有属性及方法
属性 _fileds
输出这个类的所有字段名的元祖
from collections import namedtupleperson = namedtuple('人物', 'name age gender') p1 = person('jason', 18, 'male') p2 = person('kevin', 28, 'female') print(p1._fields) print(p2._fields)''' # 执行结果 ('name', 'age', 'gender') ('name', 'age', 'gender') '''
方法 _asdict()
把具名元祖以collection.OrdereDict的形似返回
from collections import namedtupleperson = namedtuple('人物', 'name age gender') p1 = person('jason', 18, 'male') p2 = person('kevin', 28, 'female') print(p1._asdict()) print(p2._asdict())''' # 执行结果 {'name': 'jason', 'age': 18, 'gender': 'male'} {'name': 'kevin', 'age': 28, 'gender': 'female'} '''
deque
简介
双向队列,类似于list的容器,可以快速的在队列头部和尾部添加、删除元素
内部功能分类
append
从右端添加元素(与list同)
用法举例
from collections import dequeq = deque([1, 2, 3]) print(q) q.append(444) print(q)''' # 执行结果 deque([1, 2, 3]) deque([1, 2, 3, 444]) '''
appendleft
从左端添加元素
用法举例
from collections import dequeq = deque([1, 2, 3]) print(q) q.appendleft(666) print(q)''' # 执行结果 deque([1, 2, 3]) deque([666, 1, 2, 3]) '''
pop
移除列表中的一个元素(默认最右端的一个元素),并且返回该元素的值(与list同),如果没有元素,将会报出IndexError
用法举例
from collections import dequeq = deque([1, 2, 3]) print(q) print(q.pop())''' # 执行结果 deque([1, 2, 3]) 3 '''
popleft
移除列表中的一个元素(默认最左端的一个元素),并且返回该元素的值,如果没有元素,将会报出IndexError
用法举例
from collections import dequeq = deque([1, 2, 3]) print(q) print(q.popleft())''' # 执行结果 deque([1, 2, 3]) 1 '''
Counter
简介
计数器,可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。
内部独特功能
most_common()
返回一个列表,包含counter中n个最大数目的元素,如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会选择出现早的元素
用法举例
from collections import Counterlist1 = ["a", "a", "a", "b", "c", "f", "g", "g", "c", "11", "g", "f", "10", "2"] print(Counter(list1).most_common(3))list2 = ["a", "a", "a", "b", "f", "c", "g", "g", "c", "11", "g", "f", "10", "2"] print(Counter(list2).most_common(3))''' # 执行结果 [('a', 3), ('g', 3), ('c', 2)] [('a', 3), ('g', 3), ('f', 2)] '''
elements()
返回一个迭代器,每个元素重复的次数为它的数目,顺序是任意的顺序,如果一个元素的数目少于1,那么elements()就会忽略它
用法举例
from collections import Counterdic1 = {'a': 3, 'b': 4, 'c': 0, 'd': -2, "e": 0} print(Counter(dic1)) print(list(Counter(dic1).elements()))''' # 执行结果 Counter({'b': 4, 'a': 3, 'c': 0, 'e': 0, 'd': -2}) ['a', 'a', 'a', 'b', 'b', 'b', 'b'] '''
subtract()
从一个可迭代对象中或者另一个映射(或counter)中,元素相减,是数目相减而不是替换它们
用法举例
from collections import Counterdic1 = {'a': 3, 'b': 4, 'c': 0, 'd': -2, "e": 0} dic2 = {'a': 3, 'b': 4, 'c': 0, 'd': 2, "e": -1, "f": 6} a = Counter(dic1) print(a) b = Counter(dic2) print(b)''' # 执行结果 Counter({'b': 4, 'a': 3, 'c': 0, 'e': 0, 'd': -2}) Counter({'f': 6, 'b': 4, 'a': 3, 'd': 2, 'c': 0, 'e': -1}) '''
OrderedDict
简介
有序字典,实现了对字典对象中元素的排序。用法举例
from collections import OrderedDictd2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(d2) d2['x'] = 111 d2['y'] = 222 d2['z'] = 333 print(d2) print(d2.keys())''' # 执行结果 OrderedDict([('a', 1), ('b', 2), ('c', 3)]) OrderedDict([('a', 1), ('b', 2), ('c', 3), ('x', 111), ('y', 222), ('z', 333)]) odict_keys(['a', 'b', 'c', 'x', 'y', 'z']) '''
如果在已经存在的 key 上添加新的值,将会保留原来的 key 的位置,然后覆盖 value 值。
defaultdict
简介
默认字典,是内置数据类型dict的一个子类,基本功能与dict一样,只是重写了一个方法missing(key)和增加了一个可写的对象变量default_factory
语法结构
collections.defaultdict([default_factory[, …]])
第一个参数为default_factory属性提供初始值,默认为None;其余参数包括关键字参数(keyword arguments)的用法,和dict构造器用法一样。
用法举例:
使用list作第一个参数,可以很容易将键-值对序列转换为列表字典。from collections import defaultdicts=[('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] d=defaultdict(list) for k, v in s:d[k].append(v) a=sorted(d.items()) print(a)''' # 执行结果 [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] '''
time与datetime模块.
time模块
常用方法
- time.sleep(secs)
推迟指定的时间运行,单位为秒 - time.time()
获取当前时间戳
三种用于表示时间的格式(彼此之间可以转换)
时间戳<–>结构化时间- time.gmtime() 以元组方式返回格林威治时间
- localtime 将元组时间转换为时间戳
结构化时间<–>格式化时间
- time.strftime() 将元组时间转换为字符串格式时间
- time.strptime() 将字符串格式时间转换为元组格式时间
时间戳 time.time()
距离1970年1月1日0时0分0秒至此相差的秒数结构化时间 time.localtime()以元组方式返回本地当前时间
该时间类型主要是给计算机看的,人看起来不太方便import timeprint(time.localtime())''' # 执行结果 time.struct_time(tm_year=2022, tm_mon=3, tm_mday=29, tm_hour=19, tm_min=43, tm_sec=35, tm_wday=1, tm_yday=88, tm_isdst=0)'''
结果说明
0 tm_year(年) 比如2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 60
6 tm_wday(weekday) 0 - 6(0表示周一)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为0格式化时间 time.strftime()
import timeprint(time.strftime('%Y-%m-%d %H:%M:%S'))''' # 执行结果 2022-03-29 19:48:15'''
结果说明
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
- time.sleep(secs)
datetime模块
注意
date 意思就是年月日
datetime 意思就是年月日 时分秒
基础用法
返回当前时间
import datetimeprint(datetime.datetime.now())''' # 执行结果 2022-03-29 19:58:56.239953 '''
时间戳转换成日期
import datetimeprint(datetime.date.fromtimestamp(1178766678))''' # 执行结果 2007-05-10 '''
当前时间+3天
import datetimeprint(datetime.datetime.now() + datetime.timedelta(+3))''' # 执行结果 2022-04-01 20:02:47.204113 '''
当前时间-3天
import datetimeprint(datetime.datetime.now() + datetime.timedelta(-3))''' # 执行结果 2022-03-26 20:03:35.130271 '''
当前时间+3小时
import datetimeprint(datetime.datetime.now() + datetime.timedelta(hours=3))''' # 执行结果 2022-03-29 23:04:18.038341 '''
当前时间+30分钟
import datetimeprint(datetime.datetime.now() + datetime.timedelta(minutes=30))''' # 执行结果 2022-03-29 20:35:17.594292 '''
random随机数模块
代码中经常有一些生成随机数的需求。特意整理了一下python中random模块的一些相关用法。
基本用法
随机整数:
import randomprint(random.randint(0, 99))''' # 执行结果 33 '''
随机选取0到100间的偶数:
import randomprint(random.randrange(0, 101, 2))''' # 执行结果 30 '''
随机浮点数:
import random # 范围 0-10 print(random.uniform(1, 10))''' # 执行结果 9.109443958042473 '''
选择一个随机元素
import randomprint(random.choice('abc'))''' # 执行结果 b '''
将一个列表中的元素打乱
import randomp = ["Python","is", "powerful","simple", "and so on..."] random.shuffle(p) print(p)''' # 执行结果 ['powerful', 'is', 'simple', 'and so on...', 'Python'] '''
从指定序列中随机获取指定长度片段
import randomlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] a = random.sample(list, 5) print(list) print(a)''' # 执行结果 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [8, 10, 3, 9, 6] '''
随机字符:
import randomprint(random.choice('abcdefg&#%^*f'))''' # 执行结果 & '''
多个字符中选取特定数量的字符:
import randomprint(random.sample('abcdefghij', 3))''' # 执行结果 ['f', 'i', 'g'] '''
多个字符中选取特定数量的字符组成新字符串:
import randoma = ''.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).replace(" ","") print(a)''' # 执行结果 ghj '''
随机选取字符串:
import randomprint(random.choice(['apple', 'pear', 'peach', 'orange', 'lemon']))''' # 执行结果 apple '''
洗牌:
import randomitems = [1, 2, 3, 4, 5, 6] random.shuffle(items) print(items)''' # 执行结果 [4, 1, 3, 6, 5, 2] '''
学习时间:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习产出:
- CSDN 技术博客 1 篇
- 学习心得录音 1 个
- 作业
使用random模块编写一个能够产生随机验证码的代码
基本要求:产生固定位数的 比如四位
拔高要求:产生指定位数的 …
eg:
要产生四位随机验证码 J2nB
要产生五位随机验证码 JkO98
import random# 生成小写字母列表
l1 = [chr(i) for i in range(97, 123)]
# 生成大写字母列表
l2 = [chr(i) for i in range(65, 91)]
# 生成0-9数字列表
l3 = ['%s' % i for i in range(0, 10)]
# 生成四位验证码
print(''.join(random.sample(l1 + l2 + l3, 4)).replace(" ", ""))
# 生成五位验证码
print(''.join(random.sample(l1 + l2 + l3, 5)).replace(" ", ""))
Python攻城师的成长————模块突破(collections、time与datetime、random随机数模块)相关推荐
- Python攻城师的成长————Django框架(csrf相关装饰器、基于中间件思想编写项目、auth认证模块)
今日学习目标 逐步掌握csrf相关装饰器.基于中间件思想编写项目.auth认证模块知识点 文章目录 今日学习目标 学习内容 一. csrf相关装饰器 二.基于中间件思想编写项目 三.auth认证模块 ...
- Python攻城师的成长————网络编程(socket套接字、通信循环、链接循环、黏包问题)
今日学习目标 学习什么是socket套接字,并依靠它去处理TCP协议等网络编程问题 文章目录 今日学习目标 学习内容 一. socket套接字 1.什么是socket 2.套接字发展史及分类 3.套接 ...
- Python攻城师的成长————面向对象的三大特征(继承、多态)
学习目标: 了解继承与多态的概念,重点是要学会运用继承去处理问题 学习内容: 继承 在面对对象程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继 ...
- Python攻城师的成长————ORM查询
今日学习目标 熟悉掌握ORM语法操作 文章目录 今日学习目标 学习内容 一.神奇的双下划线查询 二.orm创建外键关系 三.外键字段的增删改查 四.正反向的概念 五.ORM多表查询 正向查询 反向查询 ...
- Python攻城师的成长————MySQL数据库关键字
今日学习目标 熟悉关键字用法,掌握多表查询思路 文章目录 今日学习目标 学习内容 一.查询关键字 查询关键字之having过滤 查询关键字之distinct去重 查询关键字之order by排序 查询 ...
- Python攻城师的成长————css语法、伪元素选择器(部分)
今日学习目标 熟悉并掌握css中各种修改属性的方法. 文章目录 今日学习目标 学习内容 一.伪元素选择器 css操作文本内容 选择器优先级 二.css修改属性 css修改文字属性 css修改字体属性 ...
- Python攻城师————前端学习(jQuery框架、第三方框架bootstrap框架)
今日学习目标 继续学习jQuery框架剩余的内容. 文章目录 今日学习目标 学习内容 一.jQuery操作标签 class操作 样式操作 位置操作 文本值操作 属性操作 文档处理操作 二.jQuery ...
- Python攻城师————MySQL数据库(自增、外键、关键字)
今日学习目标 正式学习MySQL数据库语句. 文章目录 今日学习目标 学习内容 一.自增特性 二.约束条件之外键 外键的定义 外键约束创建 三.查询关键字 查询关键字之select与from 查询关键 ...
- 如何成为一名优秀的web前端工程师(前端攻城师)
程序设计之道无远弗届,御晨风而返.---- 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种: 第一种一直在问:如何学习前端? 第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优 ...
最新文章
- grep 正则表达式及选项以及注意
- mysql如何下载连接到visual_Visual Studio 2015 Community连接到Mysql
- JS 点击弹出图片/ 仿QQ商城点击左右滚动幻灯片/ 相册模块,点击弹出图片,并左右滚动幻灯片...
- 新版微信对付款码截屏做处理 防止被骗
- 分布式存储Ceph 快速安装手册
- 搜索不包含关键词_新手教程!百度关键词规划师功能详解
- java反射机制详解_Java反射机制详解
- 内推学弟进了腾讯,看看他的标杆简历!
- (王道408考研数据结构)第八章排序-第四节1:冒泡排序
- django中settings中文解释
- bandwidth 0.32k 发布,内存带宽测试工具
- linux 实时查看日志 最新最后100行 tail
- 【MTSP】基于matlab蚁群和粒子群算法求解多旅行商问题【含Matlab code 1156期】
- 懒人脚本查看本机IP地址
- 免费邮箱客户端设置方法大全
- unity 制作的app发布到andriod手机
- 做数学建模,学matlab还是python?
- Java大象进冰箱线程_把大象装进冰箱:HTTP传输大文件的方法
- python linux下载磁力链_Python爬取80s网电影名称及迅雷(磁力)链接
- Web前端-React学习
热门文章
- 行业动态 | 第一个支持与 ChatGPT 进行面对面聊天的机器人女友
- 2020清华深圳研究生院物流工程与管理考研
- string转LPCTSTR类型
- linux环境下blastn命令怎么用,Linux下BLAST的安装与使用
- PHP获取钉钉审批,钉钉调用审批流
- OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦
- 为ListView添加分段标头
- MIT 6.828 (三) Lab 3: User Environments
- 【影响人一生发展的关键因素】一命二运三风水,四积阴德五读书,六名七相八敬神,九交贵人十修身
- 宝塔7Linux去掉文件夹的锁