蓝桥杯python语言基础(5)——函数
目录
一、作业:四个函数
二、math
三、collections
1. Counter
2. deque
3. defaultdict
4. OrderedDict
四、heapq
五、functool
partial偏函数
六、itertools
1.无限迭代器
2.有限迭代器
3.排列组合迭代器
一、作业:四个函数
计算最大公约数、最小公倍数、判断是否为质数以及根据三边长度求三角形面积的函数
import mathdef gcd(a, b):while b:a, b = b, a % breturn adef lcm(a, b):return a * b // gcd(a, b)def is_prime(n):if n <= 1:return Falsefor divisor in range(2, int(n ** 0.5) + 1):if n % divisor == 0:return Falsereturn Truedef triangle_area(a, b, c):if a + b <= c or a + c <= b or b + c <= a:return 0s = (a + b + c) / 2area = math.sqrt(s * (s - a) * (s - b) * (s - c))return area
二、math
常用数学函数
三角函数
math.sin(x):返回x(弧度)的正弦值。
math.cos(x):返回x(弧度)的余弦值。
math.tan(x):返回x(弧度)的正切值。
math.asin(x):返回x的反正弦值(结果为弧度)。
math.acos(x):返回x的反余弦值(结果为弧度)。
math.atan(x):返回x的反正切值(结果为弧度)。指数和对数函数
math.exp(x):返回e的x次方,其中e是自然常数。
math.log(x):返回x的自然对数(以e为底)。
math.log10(x):返回x的常用对数(以10为底)。
math.pow(x, y):返回x的y次方。
math.sqrt(x):返回x的平方根。数值处理函数
math.ceil(x):返回大于或等于x的最小整数。
math.floor(x):返回小于或等于x的最大整数。
math.trunc(x):返回x的整数部分,直接舍去小数部分。
math.fabs(x):返回x的绝对值。
math.modf(x):返回一个包含x的小数部分和整数部分的元组数学常量
math.pi:圆周率π,约为3.141592653589793。
math.e:自然常数e,约为2.718281828459045。
三、collections
1.
Counter
Counter是一个用于计数可迭代对象中元素出现次数的类。它返回一个字典,其中键是元素,值是元素出现的次数。
from collections import Counter# 统计列表中元素出现的次数
lst = [1, 2, 2, 3, 3, 3]
counter = Counter(lst)
print(counter) # Counter({3: 3, 2: 2, 1: 1})# 统计字符串中字符出现的次数
string = "ababcc"
char_counter = Counter(string)
print(char_counter) # Counter({'a': 2, 'b': 2, 'c': 2})# 获取出现次数最多的元素
most_common = counter.most_common(1)
print(most_common) # [(3, 3)]
2.
deque
deque(发音为 “deck”,是 “double-ended queue” 的缩写)是一个双端队列,支持在队列两端进行高效的添加和删除操作。
from collections import deque# 创建一个deque
dq = deque([1, 2, 3])# 在右端添加元素
dq.append(4)
print(dq) # deque([1, 2, 3, 4])# 在左端添加元素
dq.appendleft(0)
print(dq) # deque([0, 1, 2, 3, 4])# 从右端删除元素
dq.pop()
print(dq) # deque([0, 1, 2, 3])
# 从左端删除元素
dq.popleft()
print(dq) # deque([1, 2, 3])
3.
defaultdict
defaultdict是一个字典的子类,它在访问不存在的键时会自动创建一个默认值。默认值的类型由用户指定。
from collections import defaultdict# 创建一个默认值为整数0的defaultdict
dd = defaultdict(int)
dd['a'] += 1
print(dd['a']) # 1
print(dd['b']) # 0,自动创建默认值# 创建一个默认值为列表的defaultdict
dd_list = defaultdict(list)
dd_list['key'].append(1)
print(dd_list['key']) # [1]
4.
OrderedDict
OrderedDict是一个字典的子类,它会记住元素插入的顺序。在Python 3.7+ 中,普通字典已经默认保持插入顺序,但OrderedDict提供了一些额外的方法来处理有序性。
popitem(last=True)
从
OrderedDict中移除并返回一个 (键, 值) 对。如果
last=True(默认值),则移除并返回字典中的最后一个元素;如果last=False,则移除并返回第一个元素。
from collections import OrderedDictod = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3# 移除并返回最后一个元素
item1 = od.popitem()
print(item1) # ('c', 3)
print(od) # OrderedDict([('a', 1), ('b', 2)])# 移除并返回第一个元素
item2 = od.popitem(last=False)
print(item2) # ('a', 1)
print(od) # OrderedDict([('b', 2)])
四、heapq
用于堆数据结构操作。堆是一种特殊的完全二叉树,分为最小堆和最大堆。在最小堆中,每个节点的值都小于或等于其子节点的值;最大堆则相反。heapq 模块默认实现的是最小堆。
1. 基本操作
heapify(list)
将一个列表转换为堆结构。这个操作是在原列表上进行的,时间复杂度为 O(n)。
heappush(heap, item)
将元素
item 插入到堆heap 中。插入操作的时间复杂度为 O(logn),其中 n 是堆的大小。heappop(heap)
弹出堆
heap 中的最小元素(堆顶元素),并返回该元素。弹出操作后,堆会自动调整以保持堆的性质,时间复杂度也是 O(logn)。
heappushpop(heap, item)
将元素
item 插入堆heap 中,然后弹出并返回堆中的最小元素。这个操作比先调用heappush() 再调用heappop() 更高效,因为它在内部进行了优化,时间复杂度为 O(logn)。heapreplace(heap, item)
先弹出堆
heap 中的最小元素,然后将新元素item 插入堆中。返回值是被弹出的元素。这个操作的时间复杂度也是 O(logn)。
2. 应用场景
-
优先队列:
heapq 可以用来实现优先队列,其中元素按照优先级进行排序,优先级高的元素先出队。 -
图算法:在 Dijkstra 算法等图算法中,使用堆来存储节点的距离,以快速获取距离最小的节点。
-
数据处理:在处理大量数据时,使用
nsmallest 或nlargest 方法可以快速获取最大或最小的k 个元素。
五、functool
partial偏函数
创建一个新的可调用对象,这个新对象是基于一个现有的函数,并为其部分参数预先赋值。这样在调用新函数时,就不需要再次提供这些已经预先赋值的参数。
partial函数的完整语法是:functools.partial(func, *args, **keywords)。其中:
func是要创建偏函数的原始函数。
*args是为原始函数预先提供的位置参数。
**keywords是为原始函数预先提供的关键字参数。
from functools import partialdef multiply(a, b, c):return a * b * c# 创建偏函数,固定第一个参数为 2,第三个参数为 5
multiply_partial = partial(multiply, 2, c=5)result = multiply_partial(b=3)
print(result)
调用 multiply_partial(b = 3),实际上调用的是 multiply(2, 3, 5),结果为 30
六、itertools
用于处理迭代器的模块,它提供了各种生成迭代器的函数,这些迭代器可以用来生成不同类型的序列组合,在数据处理、算法设计等方面非常有用。
1.无限迭代器
count(start=0, step=1)从
start开始,以step为步长生成无限整数序列。
cycle(iterable)无限循环迭代
iterable中的元素。
repeat(object[, times])重复生成
object,如果指定times,则重复times次,否则无限重复。
2.有限迭代器
accumulate(iterable[, func])对
iterable中的元素进行累积计算。如果不提供func,默认进行累加。
chain(*iterables)将多个可迭代对象连接成一个连续的迭代器。
3.排列组合迭代器
product(*iterables, repeat=1)计算输入可迭代对象的笛卡尔积,类似于嵌套循环。
repeat参数指定重复次数。
permutations(iterable, r=None)生成
iterable中元素的全排列,如果指定r,则生成长度为r的排列。
combinations(iterable, r)生成
iterable中元素的组合,组合是无序的。
相关文章:
蓝桥杯python语言基础(5)——函数
目录 一、作业:四个函数 二、math 三、collections 1. Counter 2. deque 3. defaultdict 4. OrderedDict 四、heapq 五、functool partial偏函数 六、itertools 1.无限迭代器 2.有限迭代器 3.排列组合迭代器 一、作业:四个函数 计算最大公…...
node 爬虫开发内存处理 zp_stoken 作为案例分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言 主要说3种我们补环境过后如果用…...
006 LocalStorage和SessionStorage
JWT存储在LocalStorage与SessionStorage里的区别和共同点如下: 区别 数据有效期: • LocalStorage:始终有效,存储的数据会一直保留在浏览器中,即使窗口或浏览器关闭也一直保存,因此常用作持久数据。 • Se…...
USB鼠标的数据格式
USB鼠标的数据格式由HID(Human Interface Device)协议定义,通常包含3个字节的标准数据,具体格式如下: 字节内容描述第1字节按键状态Bit 0: 左键按下(1)<br>Bit 1: 右键按下(1…...
Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)
struct STRUCT(结构体)是一种复合数据类型,它允许你将多个字段组合成一个单一的值, 常用于处理嵌套数据,例如当你需要在一个表中存储有关另一个实体的信息时。你可以使用 STRUCT 函数来创建一个结构体。STRUCT 函数接受多个参数&…...
冯诺依曼系统及操作系统
目录 一.冯诺依曼体系结构 二.操作系统 三.系统调用和库函数概念 一.冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 截至目前,我们所认识的计算机,都是由一…...
E. Binary Search
题目链接:Problem - E - Codeforces 题目大意: 初始时有 l1,rn1。 如果当前 r−l1,退出二分查找,并且认定 l为二分查找的结果。定义 m⌊2lr⌋。如果 m≤x,将 l 赋值为 m,否则将 r 赋值为 m。 不断重复…...
P11468 有向树
有向树 题目描述 给定一棵 n n n 个结点的树,将树上所有的无向边变成给定方向的有向边,求所有简单路径的长度之和。 有向图中 a 1 a_1 a1 到 a x a_x ax 的简单路径是形如 a 1 → a 2 → a 3 → ⋯ → a x a_1 \rightarrow a_2 \rightarrow a…...
Scrapy如何设置iP,并实现IP重用, IP代理池重用
前置知识 1/3乐观锁 2/3 Scrapy流程(非全部) 3/3 关于付费代理 我用的"快代理", 1000个ip, 每个ip1min的有效期, 你用的时候, 把你的链接, 用户名填上去就行 设置代理IP 🔒 & 帮助文档: ①meta ②meta#proxy$ 语法: ①proxy的设置: Request对象中…...
Vue.js组件开发-使用Vue3如何实现上传word作为打印模版
使用Vue 3实现Word模板上传、解析和打印功能的完整解决方案: 一、实现步骤 安装依赖创建文件上传组件实现.docx文件解析创建打印预览组件实现打印功能样式优化 二、完整代码实现 1. 安装依赖 npm install mammoth axios2. 创建文件上传组件(FileUploa…...
HTML<kbd>标签
例子 在文档中将一些文本定义为键盘输入: <p>Press <kbd>Ctrl</kbd> <kbd>C</kbd> to copy text (Windows).</p> <p>Press <kbd>Cmd</kbd> <kbd>C</kbd> to copy text (Mac OS).</p>…...
如何运用python爬虫爬取知网相关内容信息?
爬取知网内容的详细过程 爬取知网内容需要考虑多个因素,包括网站的结构、反爬虫机制等。以下是一个详细的步骤和代码实现,帮助你使用Python爬取知网上的论文信息。 1. 数据准备 首先,需要准备一些基础数据,如知网的URL、请求头…...
Codeforces Round 130 (Div. 2) E. Blood Cousins(LCA+DFS序+二分)【2100】
题目链接 https://codeforces.com/contest/208/problem/E 思路 此题有两个要点:第一,快速找到节点 u u u的 p p p级祖先。第二,在以节点 u u u为根的子树中找到与节点 u u u深度相同的节点的个数。 对于第一点,我们可以使用LC…...
RocketMQ原理—5.高可用+高并发+高性能架构
大纲 1.RocketMQ的整体架构与运行流程 2.基于NameServer管理Broker集群的架构 3.Broker集群的主从复制架构 4.基于Topic和Queue实现的数据分片架构 5.Broker基于Pull模式的主从复制原理 6.Broker层面到底如何做到数据0丢失 7.数据0丢失与写入高并发的取舍 8.RocketMQ读…...
LeetCode:343. 整数拆分
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:343. 整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 &#…...
【微服务与分布式实践】探索 Eureka
服务注册中心 心跳检测机制:剔除失效服务自我保护机制 统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况,Eureka Server会将当前的实例注册信息保护起来,让这些实例不会过期。当节点在短时间内丢失过多的心跳时&am…...
Golang Gin系列-9:Gin 集成Swagger生成文档
文档一直是一项乏味的工作(以我个人的拙见),但也是编码过程中最重要的任务之一。在本文中,我们将学习如何将Swagger规范与Gin框架集成。我们将实现JWT认证,请求体作为表单数据和JSON。这里唯一的先决条件是Gin服务器。…...
技术发展视域下中西方技术研发思维方式的比较与启示
一、引言 1.1 研究背景与意义 在当今全球化的时代,科技发展日新月异,深刻地改变着人类的生活与社会的面貌。从人工智能的飞速发展,到生物科技的重大突破;从信息技术的广泛应用,到新能源技术的不断革新,技术…...
第4章 神经网络【1】——损失函数
4.1.从数据中学习 实际的神经网络中,参数的数量成千上万,因此,需要由数据自动决定权重参数的值。 4.1.1.数据驱动 数据是机器学习的核心。 我们的目标是要提取出特征量,特征量指的是从输入数据/图像中提取出的本质的数 …...
Go的内存逃逸
Go的内存逃逸 内存逃逸是 Go 语言中一个重要的概念,指的是本应分配在栈上的变量被分配到了堆上。栈上的变量在函数结束后会自动回收,而堆上的变量需要通过垃圾回收(GC)来管理,因此内存逃逸会增加 GC 的压力࿰…...
StarRocks BE源码编译、CLion高亮跳转方法
阅读SR BE源码时,很多类的引用位置爆红找不到,或无法跳转过去,而自己的Linux机器往往缺乏各种C依赖库,配置安装比较麻烦,因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器,进行编…...
Vue 响应式渲染 - 待办事项简单实现
Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 响应式渲染 - 待办事项简单实现 目录 待办事项简单实现 页面初始化 双向绑定的指令 增加留言列表设置 增加删除按钮 最后优化 总结 待办事项简单实现 页面初始化 对页面进行vue的引入、创建输入框和按钮及实例化V…...
SpringBoot基础概念介绍-数据源与数据库连接池
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 毛毛张今天介绍的SpringBoot中的基础概念-数据源与数据库连接池,同时介绍SpringBoot整合两种连接池的教程 文章目录 1 数据库与数据库管理系统2 JDBC与数…...
【面试】【前端】SSR与SPA的优缺点
一、SSR 概述 SSR(Server-Side Rendering)是指在服务器端生成 HTML 页面,并将其直接返回给浏览器的渲染方式。 在前端早期阶段,SSR 是主流,后来因性能优化和用户体验的需求逐渐发展出 SPA(单页应用&#x…...
Microsoft Visual Studio 2022 主题修改(补充)
Microsoft Visual Studio 2022 透明背景修改这方面已经有很多佬介绍过了,今天闲来无事就补充几点细节。 具体的修改可以参考:Microsoft Visual Studio 2022 透明背景修改(快捷方法)_material studio怎么把背景弄成透明-CSDN博客文…...
数科OFD证照生成原理剖析与平替方案实现
一、 引言 近年来,随着电子发票的普及,OFD格式作为我国电子发票的标准格式,其应用范围日益广泛。然而,由于不同软件生成的OFD文件存在差异,以及用户对OFD文件处理需求的多样化,OFD套餐转换工具应运而生。本…...
(done) ABI 相关知识补充:内核线程切换、用户线程切换、用户内核切换需要保存哪些寄存器?
由于操作系统和编译器约定了 ABI,如下: 编译器在对 C 语言编译时,会自动 caller 标注的寄存器进行保存恢复。保存的步骤通常发生在进入函数的时候,恢复的步骤通常发生在从函数返回的时候。 内核线程切换需要保存的寄存器&#…...
9. 马科维茨资产组合模型+FF5+GARCH风险模型优化方案(理论+Python实战)
目录 0. 承前1. 核心风险函数代码讲解1.1 数据准备和初始化1.2 单资产GARCH建模1.3 模型拟合和波动率预测1.4 异常处理机制1.5 相关系数矩阵计算1.6 构建波动率矩阵1.7 计算协方差矩阵1.8 确保矩阵对称性1.9 确保矩阵半正定性1.10 格式转换和返回1.11 calculate_covariance_mat…...
Linux 多路转接select
Linux 多路转接select 1. select select() 是一种较老的多路转接IO接口,它有一定的缺陷导致它不是实现多路转接IO的最优选择,但 poll() 和 epoll() 都是较新版的Linux系统提供的,一些小型嵌入式设备的存储很小,只能使用老版本的…...
最近最少使用算法(LRU最近最少使用)缓存替换算法
含义 最近最少使用算法(LRU)是一种缓存替换算法,用于在缓存空间有限的情况下,选择最少使用的数据项进行替换。该算法的核心思想是基于时间局部性原理,即刚被访问的数据在未来也很有可能被再次访问。 实现 LRU算法的…...
