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

这篇具有很好参考价值的文章主要介绍了蓝桥杯考前必看知识点【python 代码详解】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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


一、基本知识点

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双向队列

找到一张对双向队列解释的非常好的图片(原文在这里):
蓝桥杯python内容,算法学习,蓝桥杯,python,算法

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]

总结

好啦,今天就暂时到这里了,要是再想起什么我会继续补充的。如果大家发现有不妥之处或者有想补充的,欢迎留言哦。文章来源地址https://www.toymoban.com/news/detail-734103.html

到了这里,关于蓝桥杯考前必看知识点【python 代码详解】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【知识点】python的__init__详解

    介绍 __init__ 方法的作用 __init__ 方法是 Python 中面向对象编程中类的特殊方法,也称为构造方法,当创建一个类的实例时, __init__ 方法会自动调用。 它的主要作用是初始化实例的属性,在实例被创建后,你可以通过这些属性对实例进行操作。每个类可以定义多个不同的 __ini

    2024年02月04日
    浏览(29)
  • 蓝桥杯单片机知识点整合——临时抱佛脚

    目录 复习使用,代码根据网上资料修改,仅供参考 ds1302 原理图  手册 ds1302.c main.c onewire 原理图 手册 onewire.c main.c IIC PCF8591 原理图 手册 iic.c main.c AT2402 原理图 手册 main.c 串口UART uart.c main.c 发送数据 中断接收数据 超声波 ult.c main.c N555频率输出 main.c PWM控制LED ———————

    2023年04月24日
    浏览(55)
  • 蓝桥杯重要知识点和赛题直通车

     蓝桥杯软件赛零基础备赛20周 第 1周(2023-10-23): 蓝桥杯软件赛介绍+官方链接+零基础能得奖吗? 第 2周(2023-10-30): 常考知识点+蓝桥杯怎么判题+备赛计划 第 3周(2023-11-06): 填空题(分数少但越来越不好做) 第 4周(2023-11-13): (练习再多也不够的)杂题1 第 5周(2023-11-20): 杂题2 第

    2024年01月24日
    浏览(88)
  • python算法中的机器学习算法之无监督学习知识点(详解)

    目录 学习目标: 学习内容: Ⅰ. K均值聚类(K-Means Clustering) Ⅱ. 层次聚类(Hierarchical Clusteri

    2024年02月01日
    浏览(45)
  • 详解MVCC相关知识点

    前言:学习前,先叙述mysql相关基础知识,一步步了解mysql底层机制。 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。 √: 可能出现    ×: 不会出现

    2024年02月06日
    浏览(42)
  • pgzero所有知识点详解

    目录  什么是pgzero? pgzero的安装 4,正式开始! 1,调整背景色 2,导入角色 3,鼠标事件 5,按键事件 6,刷新功能 1,角色属性 2,功能介绍 7,全局变量and局部变量 1,全局变量与局部变量的区别 2,全局变量如何在功能内使用 8,角色功能及窗口功能 1,角色功能 2,窗口功

    2024年02月05日
    浏览(40)
  • Spring AOP知识点详解

    Spring AOP是 Spring最核心的能力,那到底什么是AOP呢,今天了不起带大家了解一下。 AOP(Aspect Oriented Programming): 面向切面编程 ,是OOP(面向对象编程)的一个延续,其和OOP一样,也是一种编程思想,不过AOP是一种横向开发模式。 OOP ,面向对象,允许开发者定义纵向的关系,但并适

    2024年02月16日
    浏览(53)
  • 【大数据】Hudi 核心知识点详解(二)

    😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!! Hudi 核心知识点详解(一) Hudi 核心知识点详解(二) Hudi 提供了 Hudi 表的概念,这些表支持

    2024年02月03日
    浏览(39)
  • 【详解】C语言冷门知识点之--位段

    下面是维基百科对位段的解释:   位段(或称“位域”,Bit field)为一种数据结构,可以把数据以位的形式紧凑的储存,并允许程序员对此结构的位进行操作。这种数据结构的好处: 可以使数据单元节省储存空间,当程序需要成千上万个数据单元时,这种方法就显得尤为重

    2024年02月16日
    浏览(40)
  • 【Unity知识点详解】自定义程序集

            今天来介绍一下Unity中的自定义程序集。在项目开发中我们经常接触到第三方插件的程序集,如DOTween、Newtonsoft.Json等。         使用自定义程序集有这么几个好处: 方便代码的的复用。当某一功能模块需要在多个项目中重复使用时,可以将代码编译成程序集,将程

    2024年02月19日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包