【未完结欢迎补充】【蓝桥杯备赛】记录提升生产力的小妙招

一、运行环境

        python3.8.6,比赛用随python一并下载的IDLE

(一)IDLE的快捷设置

1.字体及字号

 2.自动保存

3.代码自动补全

        Tab键

(二)IDLE的快捷键

二、好用的自带标准库

time、random、math、datetime、collections、itertools、heapq

搬运up主__阿岳__,自己做了点补充

1.from itertools import combinations 组合数

2.from itertools import permutations 全排列

3.from collections import deque 双端队列

4.import math math.factorial(5) 阶乘

5.arr = sorted(arr, key=lambda item: item, reverse=True) 自定义排序

6.from datetime import datetime, timedelta 日期处理

7.import collections.Counter 字典计数器

8.from collections import OrderedDict 有序字典

9.from queue import PriorityQueue 优先队列

10.import heapq 小顶堆 heapq.merge()

(一) time

import time

# 1.获取时间
time.localtime() # 本地时间
time.gmtime()    # GreenWich Mean Time,UTC协调世界时
time.ctime()     # 返回人能直观看懂的时间字符串

# 2.获取时间戳
time.time()         # 从1970年1月1号零点开始计时到此时的秒数,返回的是墙上时间
time.perf_counter() # 返回系统性能计数器时间。记录sleep。精度比time高些。常相减用在程序计时
time.process_time() # 返回的是进程时间(process time),它只计算当前进程的 CPU 活动时间,不包括 
                       睡眠或其他系统活动。不记录sleep

# 3.格式化
#strptime:p表示parse,表示分析的意思,所以strptime是给定一个时间字符串和分析模式,返回一个时间对象。
#strftime:f表示format,表示格式化,和strptime正好相反,要求给一个时间对象和输出格式,返回一个时间字符串
time.strftime('%Y年%m月%d日 %A %H:%M:%S') # 月,日小写,其他大写。第二个参数为struct_time,默认 
                                          # localtime(),也可以gmtime()
time.strptime() # %格式太多,需要上网查

# 4.休眠,单位为秒
time.sleep(3)

(二) random

import random

'''1.随机种子'''
random.seed(10) # 相同种子产生相同随机序列,不设置时默认是当前时间

'''2.产生随机数'''
# 产生随机浮点数
random.random() # [0.0,1.0)间的随机浮点数
random.uniform(1,10) # [a,b]间的随机浮点数
# 产生随机整数
random.randint(1,10) #[a,b]间的随机整数
random.randrange(10) #[0,a)间的随机整数,randrange(a,b,step) [a,b)间step步长的整数

'''3.序列的随机'''
random.choice((1,23,45,6)) # 从序列类型中(字符串,列表,元组)随机返回一个元素
random.choices('zxcvbnm',k=2) # 从序列类型中k次重复采样
random.sample('123456',4) #不重复采样4个元素,返回列表类型
random.shuffle(['s','sd','we']) # 列表,字典随机打乱
# import string
# v=string.digits+string.ascii_letters
# ''.join(random.sample(v,6))#验证码

'''4.随机采样概率分布'''
random.gauss(0,1) #生成一个符合标准正态分布的随机数
random.uniform(1,10) # 均匀分布采样

(三) collections

容器数据类型,可看作组合数据的升级版

1.namedtuple:具名元组(暂时没写)

2.Counter:计数器工具

3.双向队列deque

'''2.Counter'''
from collections import Counter
s = '牛奶奶找刘奶奶买牛奶'
c = Counter(s) # 返回字典类型
c.most_common(2) # 返回频率最高的前2位
list(c.elements())

'''3.双向队列deque
列表访问数据很快,插入删除很慢'''
from collections import deque
d = deque('ddefefefg')

d.append('f') #末尾追加,右端追加
d.appendleft('x') #开头追加,左端追加

d.pop() #右端删除
d.popleft() #左端删除

(四) itertools

1.排列组合迭代器

2.拉链

3.chain锁链

4.enumerate枚举

5.groupby分组

import itertools
'''1.排列组合迭代器'''
# 笛卡尔积 product
for i in itertools.product('ABC','123'):
    print(i)
for i in itertools.product('ABC',repeat=3):
    print(i)

# 排列 permutations
for i in itertools.permutations('ABCDE',3): #从ABCDE中有序选择3个,A(5,3)=60
    print(i)
for i in itertools.permutations(range(3)): #从0,1,2中有序选择相同长度个
    print(i)

# 组合 combinations
for i in itertools.combinations('ABCD',2): #从ABCD中无序选择2个,C(4,2)=6
    print(i)
for i in itertools.combinations(range(3),2): #从0,1,2中无序选择2个,不可缺省
    print(i)

# 元素可重复取的组合 combinations_with_replacement
for i in itertools.combinations_with_replacement('ABC',2):
    print(i)

'''2.拉链'''
# zip短拉链
for i in zip('ABC','123','wxyz'):
    print(i)
# zip_longest长拉链,缺的用None,可以用fillvalue填充
for i in itertools.zip_longest('ABC','123','wxyz',fillvalue='?'):
    print(i)

'''3.chain锁链'''
# 把小的可迭代对象串联形成更大的迭代器
for i in itertools.chain('zxc',[1,2],{3,4},range(3)):
    print(i)

'''4.enumerate枚举'''
# 返回元组类型的有两个元素组成的(索引,对应元素)
for i in enumerate('zxcv',start=1):#start默认从0开始
    print(i)

'''5.groupby分组,键组对形式
groupby(iterable,key=None)'''
# 创建一个迭代器,按照key指定的方式,返回iterable中连续的键和组
# 一般来说,要预先对数据排序,因为对iterable是连续识别的
# key缺省时默认按重复元素分组
for key,group in itertools.groupby('aaabbbbccaa'):
    print(key,list(group))
for key,group in itertools.groupby(sorted(['cat','dog','duck','bear','giraffe','lion'],key=len),key=len):#按长度排序后按长度分组
    print(key,list(group))
for key,group in itertools.groupby(sorted(['cat','dog','duck','bear','giraffe','lion'],key=lambda x:x[0]),key=lambda x:x[0]):#按首字母排序后按首字母相同的分组
    print(key,list(group))

  (五) math

import math

math.ceil(5.1) # 向上取整
math.floor(5.9) # 向下取整

math.factorial(5) #以一个整数返回 x 的阶乘。 如果 x 不是整数或为负数时则将引发 ValueError。
math.gcd(15,30) # 返回最大公约数
math.lcm(15,3) # 返回最小公倍数

math.fsum([2,3,4]) # 返回迭代对象里面所有元素的和
math.prod([2,3,4]) # 返回迭代对象里面所有元素的积

  (六) datetime

import datetime
#获取当前时间年月日时分秒
datetime.datetime.now() #datetime.now()会受到系统时钟的影响,当时钟被更改时,datetime.now()会返回不同的时间
d = datetime.datetime.today() #datetime.today()不会受到系统时钟的影响,它始终返回当前日期和时间的值
print(d.year,d.month,d.day,d.hour)

#计算n天后的日期
now = datetime.datetime.today() 
after = now + datetime.timedelta(weeks=7) # 日时分秒周

#计算两个日期的时间差
first = datetime.datetime(2024,4,9,20,26,15)
after = datetime.datetime(2026,4,9,21,26,15)
delta = after - first

  (七) heapq库,小根堆(完全二叉树,父亲节点小于等于孩子节点,根节点最小)

import heapq


arr = [26, 76, 83, 23, 48, 81, 84, 57, 42, 26, 84, 63, 31, 53, 68, 27, 75]

heapq.heapify(arr) # 将列表转换成小根堆
heapq.heappush(arr, 34) # 向堆结构中添加元素
heapq.heappop(arr) # 弹出最小元素

heapq.heapreplace(arr,57) # 先弹出最小值在添加元素

heapq.nlargest(5,arr) # 返回iterable中最大的n个元素组成的list
heapq.nsmallest(5,arr) # 返回iterable中最小的n个元素组成的list
heapq.merge() # 有序表的有序合并,返回一个可迭代的对象,可以用list(heapq.merge(a,b))展示

(八)operator库

操作符库:把运算操作符封装成函数形式,如operator.add/mul等,之后需要用到函数名的形式时key=operator.add

(九)queue库

import queue
q = queue.Queue() # 创建一个队列 FIFO 先进先出
for i in [31, 55, 53, 25, 39, 34, 51, 40, 31, 20]:
    q.put(i) # 将元素放入队列
q.queue[0] # 不删除队头元素查看方式
# print(list(q.queue)) # 查看队列
q.get() # 从队列中获取元素,队列中的头部项会被移除,因此接下来再次执行q.get()将会获取队列中的下一个项。
# print(list(q.queue))

s = queue.LifoQueue() # 创建一端封闭的队列,LIFO 后进先出,就是栈
p = queue.PriorityQueue() # 创建带有优先级的队列,数字越小优先级越大,因为内部是heapq实现的,小根堆嘛
p.put((1,'上课'))
p.put((0,'旁听'))
p.put((3,'吃饭'))
p.put((2,'上机'))
while not p.empty():
    print(p.get())

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值