蓝桥杯python组备考2(b站课程笔记)超详细

语法进阶

一、列表推导式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
想讲解一下示例4到示例7的代码

  • 4、循环n次生成n个零放进列表中,其实也就是相当于[0]*n(列表乘法,将原来的列表循环n次产生一个新的列表),接着在循环n次产生n个这样的列表,最终就是[[0,0,0,…n个零],[0,0,0,0,0,…n个零],…n个这样的列表]也就是nXn的零矩阵

  • 5、fib : fib[n] = fib[n-1]+fib[n-2]
    第n个数等于第n-1个数加上第n-2个数,先生成一个列表,里面放初始值0和1,作为第一个和第二个斐波那契数,循环n-2次,每一次都是列表最后一个元素和他前一个元素进行相加所以索引是-1和-2,然后每次都把这个相加的添加到列表中,最后一个元素索引是n-1嘛,然后索引是走n-2步到达最后,所以循环是n-2次

  • 6、for in语句就是从左往后读的,将matrix矩阵中的行拿出来,再将每个行中的每个元素拿出来打印这个元素

这里的事例7实际上是字典推导式:

字典推导式概述
字典推导式是 Python 中一种简洁的创建字典的方式,它允许你在一行代码中根据一定的规则生成字典。其基本语法如下:
{键表达式: 值表达式 for 变量 in 可迭代对象}键表达式 用于生成字典的键,值表达式 用于生成字典的值,变量 是在迭代过程中依次取到可迭代对象中的每个元素,可迭代对象 可以是列表、元组、字符串、range 对象等。
语法结构
字典推导式的基本语法如下:
{键表达式: 值表达式 for 变量 in 可迭代对象}
键表达式:用于生成字典的键,可以是简单的变量,也可以是经过某种计算或转换后的结果。
值表达式:用于生成字典的值,同样可以是简单的变量,或者是经过处理后得到的结果。
变量:在迭代过程中依次取到可迭代对象中的每个元素。
可迭代对象:可以是列表、元组、字符串、range 对象等任何支持迭代的对象。# 示例 1:将列表元素作为键,元素的平方作为值
nums = [1,2,3,4]
my_dict = {num:num**2 for num in nums}
print(my_dict)
# 使用字符串生成字典
word = "hello"
char_index_dict = {char:index for char,index in enumerate(word)}
print(char_index_dict)
# 带有条件判断的字典推导式
# 你还可以在字典推导式中添加条件判断,只选择满足特定条件的元素来生成字典。语法:
# {键表达式: 值表达式 for 变量 in 可迭代对象 if 条件表达式},其实就和列表推导式里的if是一样的,筛选出的值才能作为键
# 筛选出偶数的平方
nums = [1,2,3,4]
my_o_dict = {num:num**2 for num in nums if num%2 == 0}
print(my_o_dict)
# 多个可迭代对象的字典推导式
# 可以使用嵌套的 for 循环来处理多个可迭代对象。语法如下:
# {键表达式: 值表达式 for 变量1 in 可迭代对象1 for 变量2 in 可迭代对象2}
# 示例 4:结合两个列表生成字典
# 由于第二层循环每次都全部遍历完全,所以每一个值都是最后一个被覆盖的值
list1 = [1,2,3,4]
list2 = [2,3,4,5]
my_list = {l1:l2 for l1 in list1 for l2 in list2}
print(my_list)
# 如果想实现两个列表的值一个是键,一个是值,使用zip函数(将两个可迭代对象的对应元素打包生成一个元组,只有在用的时候才会生成元组,惰性求值),生成对应位置元组的迭代器,使用的时候才会生成元组,为了节省空间
list1 = [1,2,3,4]
list2 = [2,3,4,5]
my_list = {l1:l2 for l1,l2 in zip(list1,list2)}
print(my_list)

这里讲解一下zip函数吧:

# zip函数:在需要同时处理多个可迭代对象中对应位置的元素时非常方便。
# 它可以将多个可迭代对象(如列表、元组、字符串等)中对应位置的元素打包成一个个元组,然后返回一个由这些元组组成的迭代器。
# zip(*iterables)
# *iterables 表示接收任意数量的可迭代对象作为参数。这些可迭代对象可以是列表、元组、字符串等。
# 两个列表的打包
list1 = [1,2,3,4,5]
list2 = [4,5,6,7,8]
zip1=zip(list1,list2)
list3 = list(zip1)
print(list3)
# 多个可迭代对象的打包
list1 = [1,2,3,4,5]
tuple1 = (2,3,4,5)
str1 = "https"
zip1=zip(list1,tuple1,str1)
# 结合 for 循环使用
# zip 函数返回的迭代器通常会结合 for 循环来使用,方便对打包后的元素进行处理。
name1 = ["Alice","Mark","Tom"]
ages = [26,18,19]
for name,age in zip(name1,ages):print(f"{name}的年龄是{age}")
# 不同长度的可迭代对象
# 当传入的可迭代对象长度不一致时,zip 函数会以最短的可迭代对象的长度为准进行打包,超出部分会被忽略。
list1 = [1,2,3,4]
list2 = [2,3]
for l,s in zip(list1,list2):print(f"{l}对应{s}")
#     zip 函数的逆操作
# 可以使用 * 操作符和 zip 函数来实现 zip 函数的逆操作,将打包后的元素解包回原来的可迭代对象。
list1 = [(1,2),("h",'m')]
for l in zip(*list1):print(l)
# zip 函数返回的是一个迭代器,这意味着它是惰性求值的,只有在迭代时才会实际生成元组。如果需要多次使用打包后的结果,建议将其转换为列表或其他可重复访问的数据结构。
# 当传入的可迭代对象为空时,zip 函数会返回一个空的迭代器。
#

列表推导式:

# 列表推导式
# 列表推导式的基本语法如下:
# [expression for item in iterable]
# expression:这是一个表达式,用于对 item 进行处理,最终生成列表中的元素。
# item:表示从可迭代对象 iterable 中取出的每个元素。
# iterable:是一个可迭代对象,例如列表、元组、字符串、集合等。
# 例子1:是列表中每一个数据平方
num = [1,2,3,4]
nums = [(element**2) for element in num ]
print(nums)
# # 将字符串中所有字符进行取出,放在一个列表中
str = "hello"
str_list = [element for element in str]
print(str_list)
# 带有条件语句的列表推导式:
# 列表推导式还可以包含条件语句,语法如下:
# [expression for item in iterable if condition]
# condition:是一个布尔表达式,用于筛选符合条件的元素。只有当 condition 为 True 时,expression 才会被添加到列表中。
# 例子:取出列表中的偶数并平方
num = [1,2,3,4,6]
num_list = [element**2 for element in num if element % 2==0 ]
print(num_list)
#

二、range函数

在这里插入图片描述
在这里插入图片描述

  • 事例3:步长为负说明相邻两个数之间差倒序关系,可见相邻两个数之间差|步长|-1个数

在这里插入图片描述

  • 事例4:从0到n*2中取出每一个数,将每一个数都取模n得到它的索引值,索引值每次到n都会清零,然后只需要n * m个数就可以达到m次循环索引
  • 事例5:从左往右看for in语句,取出行的值,是0和1。每次取出一个行的值,都取出所有列的值,0和1和2,所以最终形成如上面所示网格矩阵

三、双端队列

在这里插入图片描述
栈:只能一端进,一端出(后进先出)----想象一叠盘子摞在一块,你每次都必须只拿最上面的盘子
队列:一端进入,另一端出,一般我们都是又进左出的---------相当于排队,也就是先排队的人结完账就走了,后面的人还得等着(先进先出)
双端队列:两端都可以进出,具有栈和队列的结合性,一端进出就是栈,一端进一端出就是队列

1、队列

在这里插入图片描述
queue是队列的意思,所以define+queue就是deque

  • 注意导包,要导入队列包
  • 给队列初始化一个对象以便后续使用
  • 入队列采用append因为从右端进入
  • 出队列从左端出,所以采用popleft(),而不是使用pop()他是默认移除并取出最右端一个元素,注意是有返回值的将元素从队列中移除并取出作为返回值
  • 获取队列的长度选择使用len函数

2、栈

在这里插入图片描述

  • 初始化一个列表,用来存放栈数据。
  • 入栈:使用append方法在栈的尾部添加元素
  • 出站使用pop每次移除并且取出最后一个元素
  • 栈顶元素位于最后一个元素所以索引是-1

3、一些实用的小技巧

在这里插入图片描述

  • 1、if not 条件 语句是当条件不满足时才执行if里面的语句,也就是q有值才可以执行后面的语句
  • 2、不仅是将栈翻转,将序列翻转都可以使用[::-1]
  • 3、队列可以转换成列表可迭代对象方便后续使用
  • 4、直接初始化,之前介绍过迭代器,不将值存进内存中,只是记住值在内存中的位置,需要的时候便去访问它,节省了内存,也是惰性求值,在有需要的时候才去真正的计算它或者访问值

四、判断素数

1、基础判断素数逻辑:

在这里插入图片描述

  • 素数是只能被1和它本身除的数
  • 首先导入库,sys和math
  • 先定义一个之前说过的输入函数,读取每一行数据并且将他们前后空格符规整去掉
  • 定义是否为素数函数:小于2的数不会是素数所以直接返回faluse,将这个数从2到n-1每个数都取模,出现一个取模为0的就不是素数,说明这个数是它的因数
  • 进阶版的:由于根号n*根号n = n,所以n这个数的因数有一个是大于等于根号n的,有一个是小于等于根号n的,所以只找到2到根号n的数去被取模就可以了,如果n取模这些数有等于0的,就不是素数。返回false,最终如果都没有提前返回false就返回true
  • 输入n,打印函数的返回值(true or false)

2、埃氏筛判断素数原理:

在这里插入图片描述
原理:不通过计算(之前是通过计算的比较麻烦),我们可以在2到根号n之间的数找到一些素数,然后划掉这些素数的倍数,因为这些数的倍数都有这个素数作为因数,然后这些数的倍数就不是素数,具体划掉的过程是这样的:

  • 从这个素数i的平方开始划掉,直到n,因为对于它的平方(i*i)之前的它的倍数都被其他的素数划掉了,2 * i ,3 * i,4 * i等等一直到(i-1) * i,都被这些2,3素数在遍历他们的倍数的时候划掉了,而像4 * i这种的也被当成2这个素数的倍数划掉过了
  • 步长为i,因为他的倍数都是相隔i个数,2i,3i…
  • 讲这些倍数划掉之后,剩下的就是素数,然后可以将这些数添加到素数列表中
    在这里插入图片描述
import sys
from math import *
# 埃氏筛
n = int(input())
primes = [] # 定义一个素数列表存储素数
is_primes = [True] * (n+1) # 产生全真的真值列表代表是否是素数,一共有n个数
# 产生含有n+1个真值的列表,因为列表下表索引是从0开始的,多了一个真值给0这个数,
# 想索引对应的数的时候可以直接使用is_prime[3]代表3这个数的是否是素数的真值,
# 实质:索引(素数)直接对应相应位置存储是否是素数的真值(True or false)
# 开始划掉素数相对应的倍数
for i in range(2,int(sqrt(n))+1):# 从2到根号n这些数之间找素数(之前进阶版提到过)for j in range(i*i,n+1,i):  # 从i方开始划掉数,步长是i,一直划到n,根号n的平方是nis_primes[j] = False   # 将这些倍数置为false
for i in range(2,n+1): # 从2到n遍历,索引是true的就是素数if is_primes[i]:primes.append(i)
print(primes)

五、逆波兰表达式:

一般我们习惯使用中缀表达式,但是为了计算机方便读取我们可以使用前缀后缀表达式,逆波兰表达式就是后缀表达式,不需要括号来标明操作符的优先级
在这里插入图片描述
比如传进来a,b,+这种来运算 (比如是1,2,+)
在这里插入图片描述

  • eval_rpn 是函数名,它接受一个类型为 list[str] (即字符串列表)的参数 tokens,-> int 表示这个函数最终返回的值是一个整数类型。
  • stack栈列表
  • ops是一个字典,每一个运算符都对应一个函数功能
  • 把传入的字符串列表中的元素遍历,如果是操作符则把栈中的两个元素都pop出栈,然后再栈后添加上a和b使用函数功能运算后的结果
  • 如果不是字符,那么就是数字字符串,把它转换为整形元素添加到栈中,列表中的元素前两个一定是数字字符串,所以可以保证到字符串的时候可以有两个数字出栈
  • 最终栈列表中只剩下一个元素即计算后的结果
  • 返回栈中剩的唯一一个元素,就是计算结果

传进来一个列表,比如是[‘1’,‘2’,‘+’],第一个和第二个都不在字符字典中所以走到else,都转换为int类型放入stack=[“1”,“2”],在到“+”走到if1语句里面,将a和b移除并取出,作为ops键“+”的函数的参数进行计算将返回值添加到stack中,这时候,stack中只剩下[3]了,最后返回索引为0的元素即结果
in语句的讲解:

# in 语句的讲解
# in 运算符用于判断一个元素是否存在于某个可迭代对象中,可迭代对象包括列表(list)、元组(tuple)、字符串(string)、集合(set)、字典(dict)等。
my_list = [1,2,3]
if 1 in my_list:print("right")
# 子字符串是否在字符串中
my_str = "hello"
if "ll" in my_str:print("right")
# 字典中的键是否在字典中:
my_dict = {"hello":1,"he":2,"hi":3}
if "he" not in my_dict:print("no")
else:print("yes")
# 与and或or一起使用:
my_list = [2,3,4,5]
my_str = "hello"
if 2 in my_list and "ll" in my_str:print("yes")
if "o" in my_str or 9 in my_list:print("or")
# 应用场景
# 数据验证:检查用户输入是否在允许的范围内。例如,验证用户输入的选项是否在可选列表中。
my_list = ["A","B","C"]
if input() in my_list:print("输入有效")
else:print("输入无效")

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型LLM第十四篇】Agent学习之anthropic-quickstarts Agent

前言 对于anthropic api的快速使用,在github上有几个example Customer Support Agent:由 Claude 提供支持的客户支持代理。该项目演示了如何利用 Claude 的自然语言理解和生成功能来创建可访问知识库的 AI 辅助客户支持系统。Financial Data Analyst &…

用DrissionPage升级网易云音乐爬虫:更稳定高效地获取歌单音乐(附原码)

一、传统爬虫的痛点分析 原代码使用requests re的方案存在以下局限性: 动态内容缺失:无法获取JavaScript渲染后的页面内容 维护成本高:网页结构变化需频繁调整正则表达式 反爬易触发:简单请求头伪造容易被识别 资源消耗大&am…

2025年渗透测试面试题总结- PingCAP安全工程师(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 PingCAP安全工程师 一、SQL注入判断数据库类型技术分析 1. 常规判断方法 2. 盲注场景下的判断 3. 补…

【加密社】如何创建自己的币圈工具站

需要准备的工作 1.域名 2.服务器 周末的时候主要弄了快讯这方面的代码 我这里用的是星球日报的api,也可以订阅他们的rss,这部分在github上是开源的 https://github.com/ODAILY 我这里用的是WordPressonenav主题,然后用小工具在主页展示&am…

Oracle归档配置及检查

配置归档位置到 USE_DB_RECOVERY_FILE_DEST,并设置存储大小 startup mount; !mkdir /db/archivelog ALTER SYSTEM SET db_recovery_file_dest_size100G SCOPEBOTH; ALTER SYSTEM SET db_recovery_file_dest/db/archivelog SCOPEBOTH; ALTER SYSTEM SET log_archive…

Apache Hive:基于Hadoop的分布式数据仓库

Apache Hive 是一个基于 Apache Hadoop 构建的开源分布式数据仓库系统,支持使用 SQL 执行 PB 级大规模数据分析与查询。 主要功能 Apache Hive 提供的主要功能如下。 HiveServer2 HiveServer2 服务用于支持接收客户端连接和查询请求。 HiveServer2 支持多客户端…

FPGA_DDS_IP核

接下来对FPGA的DDS的ip核进行学习。 首先对DDS需要有些了解 DDS信号发生器采用直接数字频率合成(Direct Digital Synthesis,简称DDS)技术,简单来说就是 需要一个系统频率和一个输入的数字数据 ,用这个系统频率计算出…

欢迎来到未来:探索 Dify 开源大语言模型应用开发平台

欢迎来到未来:探索 Dify 开源大语言模型应用开发平台 如果你对 AI 世界有所耳闻,那么你一定听说过大语言模型(LLM)。这些智能巨兽能够生成文本、回答问题、甚至编写代码!但是,如何将它们变成真正的实用工具…

计算机工具基础(七)——Git

Git 本系列博客为《Missing in CS Class(2020)》课程笔记 Git是一种分布式版本控制系统,被其跟踪的文件可被查询精细到行的修改记录、回退版本、建立分支等 模型 一般流程:工作区 → \to →暂存区 → \to →仓库(本地 → \to →远端) 工作区&#xff1…

uniapp动态循环表单校验失败:初始值校验

问题现象 &#x1f4a5; 在实现动态增减的单价输入表单时&#xff08;基于uv-form组件&#xff09;&#xff0c;遇到以下诡异现象&#xff1a; <uv-input>的v-model绑定初始值为数字类型时&#xff0c;required规则失效 ❌数字类型与字符串类型校验表现不一致 &#x1…

前端框架学习路径与注意事项

学习前端框架是一个系统化的过程&#xff0c;需要结合理论、实践和工具链的综合掌握。以下是学习路径的关键方面和注意事项&#xff1a; 一、学习路径的核心方面 1. 基础概念与核心思想 组件化开发&#xff1a;理解组件的作用&#xff08;复用性、隔离性&#xff09;、组件通信…

【Python机器学习】3.5. 决策树实战:基于Iris数据集

喜欢的话别忘了点赞、收藏加关注哦&#xff08;关注即可查看全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 本文紧承 3.1. 决策树理论(基础) 和 3.2. 决策树理论(进阶)&#xff0c;没看过的建议先看理论分…

Unity2022发布Webgl2微信小游戏部分真机黑屏

复现规律&#xff1a; Unity PlayerSetting中取消勾选ShowSplashScreen 分析&#xff1a; 在Unity中&#xff0c;Splash Screen&#xff08;启动画面&#xff09; 不仅是视觉上的加载动画&#xff0c;还承担了关键的引擎初始化、资源预加载和渲染环境准备等底层逻辑。禁用后导…

docker desktop 集成WSL Ubuntu22.04

Windows docker desktop 设置WSL ubuntu 22.04启用与其他发行版的集成 Windows docker desktop 安装参考 wsl ubuntu 22.04 查看我宿主机的docker desktop 容器全部的信息 wsl -d Ubuntu-22.04 -u root

快速入手-基于Django的主子表间操作mysql(五)

1、如果该表中存在外键&#xff0c;结合实际业务情况&#xff0c;那可以这么写&#xff1a; 2、针对特殊的字典类型&#xff0c;可以这么定义 3、获取元组中的字典值和子表中的value值方法 4、对应的前端页面写法

使用cursor开发java案例——springboot整合elasticsearch

安装elasticsearch 打开cursor&#xff0c;输入如下提示词 使用springboot整合elasticsearch。其中elasticsearch服务器ip&#xff1a;192.168.236.134 管理员用户名elastic 管理员密码 PdQy_xfR2yLhpok*MK_ 监听端口9200点Accept all 使用idea打开生成的项目 &#xff0…

Deepseek结合企业数据挖掘平台能够给企业提升哪些效益?

Deepseek&#xff08;深度求索&#xff09;作为智能系统&#xff0c;在政务办公领域可通过AI技术优化流程、提升效率&#xff0c;具体应用场景分析如下&#xff1a; 1. 智能公文处理与流转 自动分类与审核 利用NLP解析公文内容&#xff0c;自动分类&#xff08;如请示、报告、通…

vite中sass警告JS API过期

在Vite创建项目中引入Sass弹出The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 vite中sass警告JS API过期 The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 警告提示表明你当前正在使用的 Dart Sass 版本中&#xff0c;旧的…

jenkins+1panel面板java运行环境自动化部署java项目

本文章不包含1panel面板安装、jenkins部署、jenkins连接git服务器等操作教程&#xff0c;如有需要可以抽空后期补上 jenkins安装插件Publish Over SSH 在系统配置添加服务器 查看项目的工作空间 项目Configure->构Post Steps选择Send files or execute commands over SSH…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能📚页面效果📚指令输入�…