一.collections
模块
-
1 具名元组
nametuple
- 作用:具名元组nametuple,生成可以使用名字来访问元素内容的元组tuple
tuple可以表示不变集合,例如:一个点的二元坐标
语法: nametuple('名称',[属性list])
- 用
nametuple
表示二维坐标系
namedtuple(‘坐标点’,[‘x’,’y’])表示二维坐标系
namedtuple('坐标点',['x','y'])表示二维坐标系
# 举例:用nametuple表示一个点
from collections import namedtuple
point = namedtuple('坐标点',['x','y'])
# 生成点信息
p1 = point(1,2)
print(p1) # 坐标点(x=1, y=2)
print(p1.x) # 1
print(p1.y) # 2
-
用
nametuple
表示圆的坐标nametuple(‘圆Circle’,[‘x’,’y’,’r’])
# 举例:用nametuple表示一个圆
from collections import namedtuple
circle = namedtuple('圆Circle', ['x', 'y', 'r'])
c1 = circle(1, 2, 4)
print(c1) # 圆Circle(x=1, y=2, r=4)
print(c1.x) # 1
print(c1.y) # 2
print(c1.r) # 4
-
2 双端队列
deque
- 作用:双端队列deque 两边都能进两边都能出
队列与堆栈
队列:先进先出
堆栈:先进后出
队列和堆栈都是一边只能进一边只能出
-
deque
对于数据的处理.pop() 方法和 .popleft()方法
# 举例
from collections import deque
q = deque([1, 2, 3])
print(q) # deque([1, 2, 3])
print(q.pop()) # 弹出最后一位的数据值 3
print(q.popleft()) # 弹出第一位的数据值 1
-
模块
multiprocessing
的队列Queue
两者功能相似但略有不同,可以规定队列中数据的个数,用put方法放入数据,用get方法取出Queue中的数据
# 举例
from multiprocessing import Queue
q = Queue(3) # 声明队列只能放3个数据
q.put(111) # put 往进去放数据
q.put(222)
q.put(333)
print(q) # q是队列 <multiprocessing.queues.Queue object at 0x104d94ee0>
print(q.get()) # 111 get 取数据
-
3 有序字典
OrderedDict
特点:按照插入的key的顺序,进行有序排列
- 无序字典dict
d1 = dict([('a', 1), ('b', 2), ('c', 3)])
print(d1) # {'a': 1, 'b': 2, 'c': 3}
- 有序字典 OrderedDict
# 举例
from collections import OrderedDict
od1 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od1) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od1.get('a')) # 1 获得key 'a'对应的值为 1
print(od1.values()) # 获得od1的values: odict_values([1, 2, 3])
- 小练习:将大于60的值保存在字典的k1中,小于60的保存在k2中,{‘k1’: 大于60 , ‘k2’: 小于60}
# 先构造一个有k1 k2 的字典,再用for循环导入
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
1.for 循环
d1 = {'k1': [], 'k2': []}
for i in l1:
if i < 60:
d1['k1'].append(i)
else:
d1['k2'].append(i)
print(d1) # {'k1': [11, 22, 33, 44, 55], 'k2': [66, 77, 88, 99]}
2.列表推导式
d1 ={
'k1':[i for i in l1 if i <60],
'k2':[i for i in l1 if i >60]
}
print(d1)
3.filter函数
d2 = {
'k1': list(filter(lambda x: x < 60, l1)),
'k2': list(filter(lambda x: x > 60, l1))
}
print(d2)
-
4 统计
Counter
作用:跟踪值出现的次数,生成一个无序的容器类型,以字典的键值对形式存储结果,其中元素为key,计数结果为value
# 举例
res= 'adklfj klasdjfklkldkfjaskdlfjalk'
from collections import Counter
print(Counter(res)) # Counter({'k': 7, 'l': 6, 'a': 4, 'd': 4, 'f': 4, 'j': 4, 's': 2, ' ': 1})
二、time
时间模块
在python中时间的表现形式有三种:
- 时间戳(
timestamp
) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time()
)”,返回的是float类型 - 结构化的时间(
struct_time
): struct_time元组中共有九个元素”年:Y,月:m,日:d,时:H,分:M ,秒:S ,一年中的第几周,一年中的第几天,是否是夏令时” - 格式化的时间字符串 (
Format String
)
结构化时间:主要是给计算机看的
格式化时间:主要是给人看的
1. time.localtime(secs)
将一个时间戳转换成当前时区的struct_time,secs参数为提供的时候以当前时间为准
import time
print(time.localtime())
# time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=18, tm_min=34, tm_sec=17, tm_wday=2, tm_yday=292, tm_isdst=0)
print(time.localtime(1))
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)
2. time.gmtime(secs)
gmtime()
是将一个时间转成格林尼治时间
print(time.gmtime())
# time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=10, tm_min=39, tm_sec=33, tm_wday=2, tm_yday=292, tm_isdst=0)
print(time.gmtime(2222))
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=37, tm_sec=2, tm_wday=3, tm_yday=1, tm_isdst=0)
3. time.strftime(format[, t])
把一个代表时间的元组或者结构化时间转换为格式化时间字符串
import time
print(time.strftime('%Y/%m/%d %H:%M:%S')) # 2022/10/19 18:46:30
print(time.strftime('%Y/%m/%d %X',time.localtime(9933398))) # 1970/04/26 07:16:38
4. time.time()
返回当前时间的时间戳
import time
print(time.time()) # 1666176549.509909
print(time.strftime('%Y/%m/%d %X',time.localtime(1666176549.509909))) # 2022/10/19 18:49:09
5. time.sleep(secs)
让程序原地阻塞指定的秒数
time.sleep(10) # 让程序原地阻塞10秒
时间戳、结构化时间、格式化时间互相转换
三、datetime
时间模块
datetime:更详细的日期类型(年,月,日[,小时[,分钟[,秒[,微秒[,tzinfo]]]]]])年,月和日参数是必需的。
1. datetime.now()
和datetime.datetime.today()
获取当前日期
import datetime
print(datetime.datetime.now()) # 2022-10-19 19:00:49.876487
print(datetime.datetime.today()) # 2022-10-19 19:00:53.679567
2. datetime.date.today()
和datetime.time.hour()
import datetime
print(datetime.date.today()) # 2022-10-19
print(datetime.time.hour) # <attribute 'hour' of 'datetime.time' objects>
datetime中属性的含义:
datetime 年月日 时分秒
date 年月日
time 时分秒
3.datetime.timedelta()
date.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象。
# 比如可以用 timedelta去定时发布
# datetime.date 可以精确到天
import datetime
ctime = datetime.date.today()
print(ctime) # 2022-10-19
time_del = datetime.timedelta(days=3)
print(ctime + time_del) # 2022-10-22
# datetime.date 可以精确到时分秒
ctime = datetime.datetime.today()
print(ctime) # 2022-10-19 19:16:09.391063
time_del = datetime.timedelta(minutes=20)
print(ctime + time_del) # 2022-10-19 19:36:09.391063
4. datetime.date()
和datetime.datetime()
datetime.date精确到天,datetime.datetime精确到: 年月日 时分秒
from datetime import date, datetime
print(date.today()) # 2022-10-19
print(datetime.today()) # 2022-10-19 19:20:40.145438
print(datetime.utcnow()) # 获取格林尼治时间 2022-10-19 11:20:40.145444
import datetime
# datetime的格式化时间
c = datetime.datetime(2017, 5, 23, 12, 20)
print('指定日期:',c) # 指定日期: 2017-05-23 12:20:00
四、random
随机数模块
1. random.random()
和random.randint()
random.random()
返回 [0.0, 1.0) 范围内的下一个随机浮点数
random.randint(start,end)
返回一个随机整数
import random
print(random.random()) # 随机产生0-1之间的小数
print(random.randint(1, 6)) # 随机产生1-6之间的整数
-----------------------
0.16370721324370197
1
2. random.randrange()
random.randrange()
返回一个随机整数,相较于random.randint()
可以添加步长
print(random.randrange(1, 100, 2)) # 相较于randint可以添加步长
-------------------
75
3. random.choice()
和random.choices()
随机抽取一个元素
print(random.choice(['1等奖', '2等奖', '3等奖', '谢谢惠顾']))
print(random.choices(['1等奖', '2等奖', '3等奖', '谢谢惠顾'])) # 随机抽取一个样本 ['1等奖']
-------------------
谢谢惠顾
['谢谢惠顾'] # choices 返回会带着数据类型
4. random.sample(population, k)
在总体序列population中随机抽取k长度的列表
print(random.sample(['jason',['a',1,'duo'], (10,9), {4,5,6}, 2], 2))
-------------------
[2, (10, 9)]
5. random.shuffle()
随机打乱数据集
l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'K', 'Q']
random.shuffle(l1) # 随机打乱数据集
print(l1)
-------------------
[6, 'J', 'K', 5, 'Q', 3, 9, 7, 8, 10, 4, 2]
- 用random模块产生随机的验证码
'''产生4位的验证码: 每一位都可以是大写字母、小写字母、数字'''
def get_code(n):
code = ''
for i in range(n):
# 1.先产生随机的大写字母 小写字母 数字
random_upper = chr(random.randint(65, 90))
random_lower = chr(random.randint(97, 122))
random_int = str(random.randint(0, 9))
# 2.随机三选一
temp = random.choice([random_upper, random_lower, random_int])
code += temp
return code
res = get_code(10)
print(res)
res = get_code(4)
print(res)
原文地址:http://www.cnblogs.com/DuoDuosg/p/16807562.html