蓝桥杯考前必看知识点【python 代码详解】

2023-10-27


前言

最近一直在准备蓝桥杯,看了很多知识点及模板,考前几天就来个总结笔记巩固一下吧。写的还是比较全面的,希望也能帮助到其他备考的小伙伴呀>_<。


一、基本知识点

1.基本输入输出

s = input()  # 一个字符串
n = int(input())  # 单个数
a, b, c = map(int, input().split())  # 多个数
l_1 = list(map(int, input().split()))  # 整个列表(空格分隔)
l_2 = [int(i) for i in input().split()]  # 整个列表(空格分隔,和上一个差不多)
print(s, n, a, b, c)
print(l_1, l_2)

"""
输入如下:
abc
10
1 2 3
4 5 6
1 2 3 5 6
输出如下:
abc 10 1 2 3
[4, 5, 6] [1, 2, 3, 5, 6]
"""

2.列表转字符串

l_3 = ['a', 'b', 'c']
print(''.join(l_3))  # 输出结果:abc

3.字符串大小写转换

a = "abcd"
b = "ABCD"
print(a.upper(), b.lower())  # ABCD abcd
print(a, b)  # abcd ABCD

4.匿名函数lambda

lambda的“:”左边是输入右边是输出,尤其和排序函数放在一起真的很好用啊!

def square(a):
    return a ** 2
print(list(map(square, [1, 2, 3])))  # [1, 4, 9]
print(list(map(lambda x: x ** 2, [1, 2, 3])))  # [1, 4, 9]

h = [[2, 4],
     [8, 9],
     [4, 5],
     [5, 10]]
print(sorted(h, key=lambda x: x[0], reverse=True))  # 按照每个列表的第一个元素倒序排序
# [[8, 9], [5, 10], [4, 5], [2, 4]]

5.二/八/十六进制

print(hex(17), oct(9), bin(3))  # 0x11 0o11 0b11
print(int('11', 2), int('11', 8), int('11', 16))  # 3 9 17

6.chr/ord转换

ord()就是得到字符的ASCII值,chr()是通过ASCII值找到字符。

print(chr(97), ord('a'))  # a 97

7.保留小数点后几位

整理了三种方法如下:

x = 1.321
print(round(x, 2))  # 1.32
print('%.2f' % x)  # 1.32
print('{:.2f}'.format(x), f'{x:.2f}')  # 1.32 1.32

8.排序

  1. nums.sort():在原列表上直接排序
  2. sorted(nums):不改动原列表,生成新列表
nums = [5, 2, 7, 1, 3]
nums1 = sorted(nums, reverse=True)  # 倒序
print(nums1)  # [7, 5, 3, 2, 1]
nums.sort()
print(nums)  # [1, 2, 3, 5, 7]

二、python常用内置库模块

1.factorial阶乘

可以使用factorial阶乘求排列组合的结果(不要忘了import math):

def c(m, n):  # 是在m个数中取出n个
    return math.factorial(m) // (math.factorial(n) * math.factorial(m-n))
print(c(5, 2))  # 10
print(math.factorial(5))  # 120

2.Counter计数器

使用计数器可以直接算出每个元素出现的次数,就不需要我们遍历啦。需要获得列表的话,直接在前面套一个list()就可以了。

from collections import Counter
l2 = ['a', 'b', 'b', 'c', 'c', 'c']
d1 = Counter(l2)
print(d1)  # 输出结果:Counter({'c': 3, 'b': 2, 'a': 1})
d1['d'] = 1  # 加一个键值对
print(d1)  # 输出结果:Counter({'c': 3, 'b': 2, 'a': 1, 'd': 1})
print(list(d1))  # 输出结果:['a', 'b', 'c', 'd']
print(d1.keys())  # dict_keys(['a', 'b', 'c', 'd'])
print(d1.values())  # dict_values([1, 2, 3, 1])
print(d1.items())  # dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 1)])

3.defaultdict默认字典

我们用哈希表计数的时候,若当前元素不存在,则置为1;但是用defaultdict直接+1就行,不需要判断,因为创建defaultdict的时候已经规定了默认值类型。

from collections import defaultdict
d2 = defaultdict(int)  # 默认是int型,就默认值为0
for i, x in enumerate(l2):
    d2[x] += 1  # 省去一步判断存在的情况
print(list(d2.items()))  # [('a', 1), ('b', 2), ('c', 3)]
print(d2['a'], d2['d'])  # 1 0

4.deque双向队列

找到一张对双向队列解释的非常好的图片(原文在这里):
在这里插入图片描述

from collections import deque
d3 = deque([1, 2, 3], maxlen=4)  # 初始化一个最大长度为maxlen的队列
d3.append(4)
print(d3)  # deque([1, 2, 3, 4], maxlen=4)
d4 = deque()  # 初始化一个无固定长度的队列
d4.append(1)  # 添加元素到队尾
d4.append(2)
d4.append(3)
d4.appendleft(0)  # 添加元素到队首
print(d4, list(d4))  # deque([0, 1, 2, 3]) [0, 1, 2, 3]
print(d4.popleft(), d4.pop())  # 弹出队首/队尾元素 0 3
print(d4)  # deque([1, 2])

5.permutation全排列

from itertools import permutations
l1 = list(permutations([1, 2, 3]))
print(l1)  # [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

6.combinations组合

from itertools import combinations
l3 = list(combinations([1, 2, 3], 2))  # 第二个参数为选择组合的个数
print(l3)  # [(1, 2), (1, 3), (2, 3)]

7.accumulate累加

accumulate在求前缀和时很好用,不需要自己遍历一遍数组了。
accumulate函数创建一个迭代器,返回累积汇总值或其他双目运算函数的累积结果值(通过可选的 func 参数指定)。如果提供了 func,它应当为带有两个参数的函数但是,如果提供了关键字参数 initial,则累加会以 initial值开始,这样输出就比输入的可迭代对象多一个元素。

from itertools import accumulate
a = [1, 2, 3, 4]
print(list(accumulate(a)))  # [1, 3, 6, 10]
print(list(accumulate(a, initial=0)))  # [0, 1, 3, 6, 10]
print(list(accumulate(a, initial=1)))  # [1, 2, 4, 7, 11]

8.heapq堆

python中的堆是小顶堆,如果是二维列表,默认以每个列表的第一个元素来排序。
1)heapify让列表具有堆的特征;
2)heappop弹出最小的元素(总是位于索引0处);
3)heappush用于在堆中添加一个元素;
4)从堆中弹出最小的元素,再压入一个新元素。

from heapq import *
h = [[2, 4],
     [8, 9],
     [4, 5],
     [5, 10]]
heapify(h)
print(h)  # [[2, 4], [5, 10], [4, 5], [8, 9]]
print(heappop(h))  # [2, 4]
print(h)  # [[4, 5], [5, 10], [8, 9]]
heappush(h, [1, 2])
print(h)  # [[1, 2], [4, 5], [8, 9], [5, 10]]
heapreplace(h, [3, 2])
print(h)  # [[3, 2], [4, 5], [8, 9], [5, 10]]
print(heappop(h))  # [3, 2]

9.datetime时间

差点忘了这个,时间模块之前也是经常考的。

from datetime import *
start = date(year=2023, month=4, day=4)
end = date(year=2023, month=4, day=8)
t = timedelta(days=1)
while start <= end:
    print(start, start.weekday())  # 0-6 代表周一到周日
    start += t
print(end.year, end.month, end.day)
"""
2023-04-04 1
2023-04-05 2
2023-04-06 3
2023-04-07 4
2023-04-08 5
2023 4 8
"""

三、常用算法模板

1.最大公约数 / 最小公倍数

最大公约数在math中可以写,也可以直接使用math.gcd(x, y)调用,调用的时候不要忘了import math :

import math
def gcd(n1, n2):  # 自己写
    if n2 > n1:
        n1, n2 = n2, n1
    while n2:
        n1, n2 = n2, n1 % n2
        print(n1, n2)
    return n1
    # return math.gcd(n1, n2) if n2 > 0 else n1  # 调用
# print(gcd(6, 81))

最小公倍数就是两数乘积再除以最大公约数:

def lcm(n1, n2):
    return n1 * n2 // gcd(n1, n2)
    # return n1 * n2 // math.gcd(n1, n2)
# print(lcm(6, 81))

2.质数判断 / 质数个数

判断数n是否为质数:

def isPrim(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True
# print(isPrim(7))

判断1到n之间(不包括n这个数)有多少个素数(厄拉多塞筛法):

def countPrim(n):
    count = 0
    signs = [True] * n  # 先假设全为质数
    for i in range(2, n):
        if signs[i]:
            count += 1
            for j in range(i+i, n, i):  # 质数的倍数一定不是质数,置为False
                signs[j] = False
    return count
# print(countPrim(5))  # 2 3

3.快速幂

参考了一位大佬的文章,想深入了解戳这里哦,一步一步带你去理解,真的写的非常非常好!

def normalPower(base, power):
    result = 1
    while power:
        if power % 2 == 1:
            result = result * base % 1000
        base = base * base % 1000
        power //= 2
    return result
# print(normalPower(2, 1000000000))

4.bisect二分

其实这一部分也可以放在上面内置模块部分。二分法当然可以自己写的,但是现成的库是真好用啊,做题时省时省力!
1)查找:
bisect:查找目标元素右侧插入点
bisect_left:查找目标元素左侧插入点
bisect_right:查找目标元素右侧插入点
2)插入:
insort:查找目标元素右侧插入点,并保序地插入元素
insort_left: 查找目标元素左侧插入点,并保序地插入元素
insort_right:查找目标元素右侧插入点,并保序地插入元素

from bisect import *
l4 = [1, 2, 3, 3, 3, 4, 5]
pos = bisect(l4, 3)  # 只查找,不改变列表
pos_left = bisect_left(l4, 3)
pos_right = bisect_right(l4, 3)
print(pos, pos_left, pos_right)  # 5 2 5
insort(l4, 4.5)
print(l4)  # [1, 2, 3, 3, 3, 4, 4.5, 5]
insort(l4, 2.5)
print(l4)  # [1, 2, 2.5, 3, 3, 3, 4, 4.5, 5]

总结

好啦,今天就暂时到这里了,要是再想起什么我会继续补充的。如果大家发现有不妥之处或者有想补充的,欢迎留言哦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯考前必看知识点【python 代码详解】 的相关文章

  • 整数 numpy 数组乘以浮点数

    我有一个包含整数值的 numpy 数组 如果我将整个矩阵乘以一个浮点数 结果是一个浮点矩阵 但如果我通过 for 循环逐列相乘 它只给出整数部分 import numpy as np A np array 1 2 3 4 5 6 7 8 9
  • scrapy中cookies的正确使用形式是什么

    我是个新手 我正在一个使用cookies的网络中使用scrapy 这对我来说是一个问题 因为我可以在没有cookies的网络上获取数据 但在有cookies的网络上获取数据对我来说很困难 我有这个代码结构 class mySpider Ba
  • Celery未注册任务KeyError

    我通过在终端中执行以下命令来启动工作程序 celery A cel test worker loglevel INFO concurrency 10 n worker1 h 然后我收到一条长循环错误消息 指出 celery 已收到未注册的任
  • 调用 close() 后大文件没有立即刷新到磁盘?

    我正在使用 python 脚本创建大文件 超过1GB 实际上有 8 个 在创建它们之后 我必须创建将使用这些文件的进程 该脚本如下所示 This is more complex function but it basically does
  • Python 字符串格式 - 类型错误 - 格式字符串参数不足

    那么这个字符串有什么问题呢 我无法弄清楚为什么它说格式字符串没有足够的参数 我是 Python 新手 只是想弄清楚 编辑 这与建议的其他问题不同 另一个正在尝试做一些我什至没有涉及的疯狂数组事情 我只需要了解元组的基本概念以及字符串格式化的
  • 无法为从图中加载的张量变量赋值

    我已经训练了一个模型并保存了它 现在 我试图了解权重扰动如何影响其准确性 因此我需要修改权重变量中保存的值 本质上会为其添加一些噪声 问题是加载它们后我无法为它们分配值 我正在使用 TensorFlow 版本 1 2 1 来训练和加载模型
  • dulwich - 从远程仓库身份验证克隆

    我找不到有关此主题的任何资源 我需要通过提供用户名和密码从私有存储库进行克隆 然而 当它们作为关键字参数提供给 dulwich get client from path 时 会出现错误 提示 未知参数 用户名 这似乎是一件简单的事情 但我找
  • 当我执行 pip --version 时,它显示错误为 ImportError:没有名为 pyparsing 的模块

    我尝试安装 卸载py解析以及它不起作用 我被这个问题困住了 我还必须安装额外的库 这是错误消息 Traceback most recent call last File usr bin pip line 5 in
  • Scipy - 求矩阵列空间的基数

    我正在尝试编写一个简单的单纯形算法 其第一步是找到一个基本的可行解决方案 选择 A 的线性独立列的一组 B 将 x 中与不在 B 中的列相对应的所有分量设置为零 求解 m 个所得方程以确定 x 的分量 这些是基本变量 我知道解决方案将涉及使
  • 强制 shell 在 SunGrid 引擎中使用 conda 变量中的 python [重复]

    这个问题在这里已经有答案了 我正在尝试在 SunGrid 引擎中执行 python 文件 并且从 anaconda3 环境变量中执行它 我的代码很简单 from future import print function import url
  • 与正在运行的进程通信

    We have 基于Python的服务器 A 正在运行的命令行应用程序 在同一台 Linux 机器上 能够读取stdin 计算一些东西并将输出提供给stdout B 将输入从 A 发送到的最佳 最优雅 方式是什么 stdin B 的 并等待
  • Psycopg2 中的元命令 - \d 不起作用

    我希望使用列出表的所有列名psycopg2Python 包 2 7 但我无法执行以下查询 cur execute d my table psycopg2 ProgrammingError syntax error at or near 对于
  • 使用 Opencv 屏蔽水平线和垂直线

    我正在尝试删除该图像中的水平线和垂直线 以便拥有更清晰的文本区域 我正在使用下面的代码 它遵循这个guide https docs opencv org 3 2 0 d1 dee tutorial moprh lines detection
  • zsh:当我尝试在 venv 中运行应用程序时,中止 python 错误

    我使用以下命令设置 Python 3 6pyenv这样我将来就可以管理多个Python版本 例如3 7和3 8 我没有使用 Homebrew 安装 Python 因为它改变了系统版本 这是我第一次使用zshshell 因为它是 Catali
  • python pandas 将两行或多行文本合并为一行

    我有包含文本数据的数据框 如下所示 name address number 1 Bob bob No 56 2 gmail com 3 Carly email protected cdn cgi l email protection No
  • Flask 从线程中删除会话变量

    我尝试实施投票系统 它的工作原理是这样的 如果用户对帖子进行投票 我会在会话变量中记录其临时状态 已投票 已加星标等 如果当前用户在我将结果保存到临时表之前尚未投票 用户可以在 5 分钟内更改投票 5 分钟后 结果将使用线程永久写入数据库
  • 显示进度的脚本?

    当我的 python 脚本处理大文件时 我想向用户显示进度 我见过脚本印刷 在 shell 中的同一光标位置显示进度 我怎样才能在Python中做到这一点 你应该使用python 进度条 http code google com p pyt
  • numpy.genfromtxt 生成看起来像元组的数组,而不是二维数组 - 为什么?

    我在跑genfromtxt像下面这样 date conv lambda x str x replace time conv lambda x str x a np genfromtxt input txt delimiter skip he
  • 单元测试期间的 Python 日志捕获

    我正在尝试捕获在 python 单元测试过程中创建的日志 并在此处看到了代码 https stackoverflow com a 1049375 576333 https stackoverflow com a 1049375 576333
  • “from-import”是否执行整个模块?

    好的 所以我知道from import与 完全 相同import 但这显然不是因为命名空间的填充方式不同 我的问题主要是因为我有一个utils我的应用程序中的每个其他模块都使用一个或两个函数的模块 我正在努力合并标准库logging模块 据

随机推荐

  • wsl2 出现 Vmmem内存占用过大问题解决

    分步解决方法 定期执行缓存删除 在WSL bash上 执行 sudo crontab e u root 并添加以下行 15 sync echo 3 gt proc sys vm drop caches touch root drop cac
  • AD常用DRC规则简单介绍

    前言 最近在复习AD中画PCB板时的DRC规则 在这里做一个常用规则的简单总结 虽然有时候可以无脑将除电气规则以外的其他规则全部取消勾选 但是这样并不好 正文 Electrical Clearance Constraint 走线的线路间隔
  • Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage

    Feign调用无法解析 IPage包裹的数据 目前解决方案有两种 一种是转Page 另一种是序列化 一 转Page传递 api接口 PostMapping value queryEnterprise public Result
  • Mysql基础(入门)

    一 数据库介绍 1 什么是数据库 数据库就是 个存放计算机数据的仓库 这个仓库是按照 定的数据结构 数据结构是指数据的组织形式或数据之间的联系 来对数据进 组织和存储的 可以通过数据库提供的多种 法来管理其中的数据 2 数据库的种类 最常
  • cuda的Shuffle技术以及自定义双精度版本

    还是数组求和问题引起的 发现之前那个版本http blog csdn net lingerlanlan article details 24630511 对于数组的维度是有要求的 因为归约每次变为一半 所以对于线程块的数量和每个线程块线程的
  • Git:Git的一些基本操作

    文章目录 基本认识 使用方法 创建本地仓库 配置本地仓库 工作区 暂存区 版本库的概念 添加文件 版本回退 撤销修改 删除操作 基本认识 首先要对Git有一个基本的认知 Git本质上是一个版本控制器 可以对一个信息的多个版本进行一些控制 而
  • 《canvas》之第19章 canvas游戏开发

    canvas 之第19章 canvas游戏开发 第19章 canvas游戏开发 19 1 canvas游戏开发简介 19 2 Box2D简介 19 2 1 Box2D 19 2 2 Box2DWeb 19 3 html5游戏引擎 第19章
  • Java:SimpleDateFormat解析过程中的时区问题

    在做分布式系统开发的过程中 笔者遇到了集群中各成员显示时间数据不一致的问题 排查发现是因各个成员的系统时区设置不同 导致SimpleDateFormat类解析结果不同导致 mark一下 Java中的SimpleDateFormat类具有将D
  • floyd算法 O(n^3)

    标准弗洛伊德算法 三重循环 循环结束之后 d i j 存储的就是点 i 到点 j 的最短距离 需要注意循环顺序不能变 第一层枚举中间点 第二层和第三层枚举起点和终点 特点 1 复杂度为O n 3 只能处理200以内的点 2 一次求出所有结点
  • Kali 2020.1版本 安装VMware Tools

    Kali 2020 1版本 安装VMware Tools 文章目录 Kali 2020 1版本 安装VMware Tools 1 虚拟机 gt 安装VMware Tools 2 终端输入命令df h确定是否已经挂载 3 进入挂载的目录下 将
  • 数字预失真技术的基本原理及其MATLAB实现

    数字预失真技术的基本原理及其MATLAB实现 数字预失真技术是一种用于提高无线通信系统性能的技术 其基本原理是在系统发送信号之前先对信号进行一定的失真 以抵消后续传输过程中的非线性影响 而MATLAB作为一款强大的数学计算软件 可以帮助我们
  • C语言里的延时函数

    C语言延时 悬赏分 0 解决时间 2007 2 18 14 48s级的时间延时杂写啊 大侠们帮哈忙啊 最佳答案 在Windows下最简单的办法是调用系统函数Sleep time 单位是ms 在windows h中声明 注意大小写 不然就用
  • anaconda安装和使用

    安装 1 1 下载安装脚本 wget https mirrors tuna tsinghua edu cn anaconda archive Anaconda3 2020 07 Linux x86 64 sh 1 2 运行安装向导 bash
  • vue引入全局自定义组件

    1 告知 本案例使用的vue3 x 2 在src下 新建如下文件夹及文件 名称可随意 3 wb loading vue内容如下
  • 【机器人学】使用代数法求解3自由度拟人机械臂的逆运动学解

    这篇博客会讨论一下使用解析法求解3自由度拟人机械臂的逆解及分析 一 机械臂的逆解 机械臂的逆运动学问题就是由给定的末端执行器位置和方向 确定机械臂各个关节变量的值 机械臂的求解方法可以分为两大类 数值解和解析解 封闭解 解析解又可分为代数解
  • “泰迪杯”挑战赛-争对主流论坛(新浪,天涯,哇哈哈)进行正文提取

    目 录 挖掘目标 全文脉络图 爬虫技术简介 3 1 爬虫简介 3 2 正则表达式介绍 具体步骤 4 1 解题思路 4 2 提取主题帖 4 3 提取回帖 效果展示 5 1 哇哈体育论坛爬虫结果 5 2 新浪论坛爬虫结果 5 3 天涯论坛爬虫结
  • 2万字带你了解Selenium全攻略

    大家好 我是才哥 今天带大家一起学 复 习模拟浏览器运行的库Selenium 它是一个用于Web应用程序测试的工具 Selenium测试直接运行在浏览器中 就像真正的用户在操作一样 支持的浏览器包括IE 7 8 9 10 11 Mozill
  • 堆的核心概述

  • 【Unity3D】笔记之OnGUI()下的自适屏

    转眼离上一篇博客的已有半年之久 想当初 满怀激情的说要坚持更新博客 记录学习笔记 但要真正坚持下去 确实需要非凡的毅力啊 脑子的那股热一散去整个人就懒了 还记得那时正准备写篇关于在OnGUI 方法下UI如何自动适应屏幕分辨率变化 但一直拖着
  • 蓝桥杯考前必看知识点【python 代码详解】

    文章目录 前言 一 基本知识点 1 基本输入输出 2 列表转字符串 3 字符串大小写转换 4 匿名函数lambda 5 二 八 十六进制 6 chr ord转换 7 保留小数点后几位 8 排序 二 python常用内置库模块 1 facto