蓝桥杯python语言基础(5)——函数

news2025/1/30 14:01:43

目录

一、作业:四个函数

二、math

三、collections

1. Counter

2. deque

3. defaultdict

4. OrderedDict

四、heapq

五、functool

partial偏函数

六、itertools

1.无限迭代器

2.有限迭代器

3.排列组合迭代器


一、作业:四个函数

计算最大公约数、最小公倍数、判断是否为质数以及根据三边长度求三角形面积的函数


import math

   
def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

   
def lcm(a, b):
    return a * b // gcd(a, b)

   
def is_prime(n):
    if n <= 1:
        return False
    for divisor in range(2, int(n ** 0.5) + 1):
        if n % divisor == 0:
            return False
    return True

   
def triangle_area(a, b, c):
    if a + b <= c or a + c <= b or b + c <= a:
        return 0
    s = (a + b + c) / 2
    area = 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):返回ex次方,其中e是自然常数。

  • math.log(x):返回x的自然对数(以e为底)。

  • math.log10(x):返回x的常用对数(以10为底)。

  • math.pow(x, y):返回xy次方。

  • 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 OrderedDict
   
od = 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 partial
   
def 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 中元素的组合,组合是无序的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2286450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

node 爬虫开发内存处理 zp_stoken 作为案例分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言 主要说3种我们补环境过后如果用…

Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)

struct STRUCT&#xff08;结构体&#xff09;是一种复合数据类型&#xff0c;它允许你将多个字段组合成一个单一的值, 常用于处理嵌套数据&#xff0c;例如当你需要在一个表中存储有关另一个实体的信息时。你可以使用 STRUCT 函数来创建一个结构体。STRUCT 函数接受多个参数&…

冯诺依曼系统及操作系统

目录 一.冯诺依曼体系结构 二.操作系统 三.系统调用和库函数概念 一.冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是由一…

Scrapy如何设置iP,并实现IP重用, IP代理池重用

前置知识 1/3乐观锁 2/3 Scrapy流程(非全部) 3/3 关于付费代理 我用的"快代理", 1000个ip, 每个ip1min的有效期, 你用的时候, 把你的链接, 用户名填上去就行 设置代理IP &#x1f512; & 帮助文档: ①meta ②meta#proxy$ 语法: ①proxy的设置: Request对象中…

HTML<kbd>标签

例子 在文档中将一些文本定义为键盘输入&#xff1a; <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>…

RocketMQ原理—5.高可用+高并发+高性能架构

大纲 1.RocketMQ的整体架构与运行流程 2.基于NameServer管理Broker集群的架构 3.Broker集群的主从复制架构 4.基于Topic和Queue实现的数据分片架构 5.Broker基于Pull模式的主从复制原理 6.Broker层面到底如何做到数据0丢失 7.数据0丢失与写入高并发的取舍 8.RocketMQ读…

Golang Gin系列-9:Gin 集成Swagger生成文档

文档一直是一项乏味的工作&#xff08;以我个人的拙见&#xff09;&#xff0c;但也是编码过程中最重要的任务之一。在本文中&#xff0c;我们将学习如何将Swagger规范与Gin框架集成。我们将实现JWT认证&#xff0c;请求体作为表单数据和JSON。这里唯一的先决条件是Gin服务器。…

技术发展视域下中西方技术研发思维方式的比较与启示

一、引言 1.1 研究背景与意义 在当今全球化的时代&#xff0c;科技发展日新月异&#xff0c;深刻地改变着人类的生活与社会的面貌。从人工智能的飞速发展&#xff0c;到生物科技的重大突破&#xff1b;从信息技术的广泛应用&#xff0c;到新能源技术的不断革新&#xff0c;技术…

第4章 神经网络【1】——损失函数

4.1.从数据中学习 实际的神经网络中&#xff0c;参数的数量成千上万&#xff0c;因此&#xff0c;需要由数据自动决定权重参数的值。 4.1.1.数据驱动 数据是机器学习的核心。 我们的目标是要提取出特征量&#xff0c;特征量指的是从输入数据/图像中提取出的本质的数 …

Go的内存逃逸

Go的内存逃逸 内存逃逸是 Go 语言中一个重要的概念&#xff0c;指的是本应分配在栈上的变量被分配到了堆上。栈上的变量在函数结束后会自动回收&#xff0c;而堆上的变量需要通过垃圾回收&#xff08;GC&#xff09;来管理&#xff0c;因此内存逃逸会增加 GC 的压力&#xff0…

StarRocks BE源码编译、CLion高亮跳转方法

阅读SR BE源码时&#xff0c;很多类的引用位置爆红找不到&#xff0c;或无法跳转过去&#xff0c;而自己的Linux机器往往缺乏各种C依赖库&#xff0c;配置安装比较麻烦&#xff0c;因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器&#xff0c;进行编…

Vue 响应式渲染 - 待办事项简单实现

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 响应式渲染 - 待办事项简单实现 目录 待办事项简单实现 页面初始化 双向绑定的指令 增加留言列表设置 增加删除按钮 最后优化 总结 待办事项简单实现 页面初始化 对页面进行vue的引入、创建输入框和按钮及实例化V…

SpringBoot基础概念介绍-数据源与数据库连接池

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 毛毛张今天介绍的SpringBoot中的基础概念-数据源与数据库连接池&#xff0c;同时介绍SpringBoot整合两种连接池的教程 文章目录 1 数据库与数据库管理系统2 JDBC与数…

Microsoft Visual Studio 2022 主题修改(补充)

Microsoft Visual Studio 2022 透明背景修改这方面已经有很多佬介绍过了&#xff0c;今天闲来无事就补充几点细节。 具体的修改可以参考&#xff1a;Microsoft Visual Studio 2022 透明背景修改&#xff08;快捷方法&#xff09;_material studio怎么把背景弄成透明-CSDN博客文…

(done) ABI 相关知识补充:内核线程切换、用户线程切换、用户内核切换需要保存哪些寄存器?

由于操作系统和编译器约定了 ABI&#xff0c;如下&#xff1a; 编译器在对 C 语言编译时&#xff0c;会自动 caller 标注的寄存器进行保存恢复。保存的步骤通常发生在进入函数的时候&#xff0c;恢复的步骤通常发生在从函数返回的时候。 内核线程切换需要保存的寄存器&#…

Linux 多路转接select

Linux 多路转接select 1. select select() 是一种较老的多路转接IO接口&#xff0c;它有一定的缺陷导致它不是实现多路转接IO的最优选择&#xff0c;但 poll() 和 epoll() 都是较新版的Linux系统提供的&#xff0c;一些小型嵌入式设备的存储很小&#xff0c;只能使用老版本的…

【实践案例】使用Dify构建文章生成工作流【在线搜索+封面图片生成+内容标题生成】

文章目录 概述开始节点图片封面生成关键词实时搜索主题参考生成文章详情和生成文章标题测试完整工作流运行测试结果 概述 使用Dify构建文章生成工作流&#xff0c;使用工具包括&#xff1a;使用 Tavily 执行的搜索查询&#xff0c;使用Flux生成封面图片&#xff0c;使用Stable…

Web3 如何赋能元宇宙,实现虚实融合的无缝对接

随着技术的飞速发展&#xff0c;元宇宙作为一个未来数字世界的概念&#xff0c;正在吸引全球范围内的关注。而 Web3 技术的兴起&#xff0c;为元宇宙的实现提供了强大的支撑。Web3 是基于区块链技术的去中心化网络&#xff0c;它在改变互联网的同时&#xff0c;也推动着虚拟世界…

LangChain的开发流程

文章目录 LangChain的开发流程开发密钥指南3种使用密钥的方法编写一个取名程序 LangChain表达式 LangChain的开发流程 为了更深人地理解LangChain的开发流程&#xff0c;本文将以构建聊天机器人为实际案例进行详细演示。下图展示了一个设计聊天机器人的LLM应用程序。 除了Wb服务…

电商系统-用户认证(四)Oauth2授权模式和资源服务授权

本文章介绍&#xff1a;Oauth2.0 常见授权模式&#xff0c;资源服务授权 。 准备工作 搭建认证服务器之前&#xff0c;先在用户系统表结构中增加如下表结构&#xff1a; CREATE TABLE oauth_client_details (client_id varchar(48) NOT NULL COMMENT 客户端ID&#xff0c;主…