蓝桥杯python速通(第一课时)

张开发
2026/4/10 1:54:11 15 分钟阅读

分享文章

蓝桥杯python速通(第一课时)
本课程针对只有一点点python基础知识但是想要快速学习完蓝桥杯基本内容的同学适用于蓝桥杯考前临时抱佛脚。一.字符串的输入输出s 123456789 print(s) # 输出字符串 # 输出: 123456789 print(s[0:-1]) # 输出第一个到倒数第二个的所有字符 # 输出: 12345678 print(s[0]) # 输出字符串第一个字符 # 输出: 1 print(s[2:5]) # 输出从第三个开始到第六个的字符不包含 # 输出: 345 print(s[2:]) # 输出从第三个开始后的所有字符 # 输出: 3456789 print(s[1:5:2]) # 输出从第二个开始到第五个且每隔一个的字符步长为2 # 输出: 24 print(s * 2) # 输出字符串两次 # 输出: 123456789123456789 print(s 你好) # 连接字符串 # 输出: 123456789你好二.import模块导入在 Python 中使用 import 或 from...import 语句可以导入模块或模块中的特定功能。import 模块名导入整个模块用的时候要写 “模块名。功能”比如 math.sqrt安全不冲突。import 模块名 as 别名给模块起短名比如 numpy→np最常用、省时间。from 模块 import 函数只导入 1 个需要的函数不用写模块名直接用。from 模块 import 函数 1, 函数 2一次性导入多个需要的函数精准不浪费。from 模块 import *导入模块所有内容不用写模块名但容易重名项目里别用。from 模块 import 变量导入模块里的变量 / 配置不是函数比如 sys 里的路径、参数。三.快读模板import sys # 使用 sys.stdin 读取输入并去除换行符 input lambda: sys.stdin.readline().strip()这个模板只会改变读入的速度在接下来写代码的时候读入的方式完全和正常的读入方式一模一样只是速度会变快建议在做题的时候如果出现要读取多次的内容时在正式写题前首先先将这个模板写入。四.输入输出4.1 输出print是python中的主要的输出方法以下是它在比赛中出现的主要用法1. 基本用法print(Hello, World!)2. 输出多个值print(Name:, Alice, Age:, 25)3. 自定义分隔符 使用 sep 参数指定多个值之间的分隔符print(2026, 12, 5, sep————) 打印结果2026————12————54. 自定义结束符使用 end 参数指定输出结束时的字符默认为换行符 \nprint(hello,end ) print(world) 打印结果hello world print(hello) print(world) 打印结果 hello world5. 格式化输出使用f-stringnamelanqiao print(fhello,{name}) namelanqiao grade80 print(fhello,{name},your grade is {grade})使用 format 方法namelanqiao print({},hello.format(name)) print({},hello.format(lanqiao))6. 高效输出(*list解包)a[1,2,3,4,5] print(a) print(*a) 输出结果 [1, 2, 3, 4, 5] 1 2 3 4 54.2 输入python比赛中常见以下几种高效的输入形式单行多个整数的输入a,b,c,dmap(int,input().split()) print(a,b,c,d)多行多个整数的输入先用map一行多个再用for循环多行多个# 1. 先输入行数n n int(input()) # 2. 读取n行每行多个整数生成二维列表矩阵 matrix [list(map(int, input().split())) for _ in range(n)] # 3. 打印结果 print(matrix)五.数据类型Python 常用数据类型及其特性1. 整数 (int)支持大整数运算2. 浮点数 (float)注意精度问题3. 字符串 (str)不可变序列支持切片和格式化4. 列表 (list)可变序列支持增删改查5. 元组 (tuple)不可变序列6. 集合 (set)无序不重复支持集合运算7. 字典 (dict)键值对映射如 d {key: value}# 1. 字符串 str s HelloWorld # 切片 print(s[1:3]) # 索引1到2不包含3→ el print(s[:5]) # 从头开始到5 → Hello print(s[5:]) # 从5到结尾 → World print(s[-3:]) # 最后3个字符 → rld # 常用方法 print(s.lower()) # 转小写 → helloworld print(s.upper()) # 转大写 → HELLOWORLD print(s.replace(H, h)) # 替换字符 → helloWorld print(len(s)) # 长度 → 10 print(s.split(W)) # 按字符分割 → [Hello, orld] # 格式化输出 print(f{s}, Python!) # HelloWorld, Python! # 2. 列表 list最常用 lst [1, 2, 3] # 增 lst.append(4) # 末尾添加 → [1,2,3,4] lst.insert(0, 0) # 指定位置插入 → [0,1,2,3,4] # 删 lst.pop() # 删除最后一个 → [0,1,2,3] lst.remove(1) # 删除指定元素 → [0,2,3] # 改 lst[0] 100 # 修改第0个元素 → [100,2,3] # 查 切片 print(lst[1]) # 取索引1 → 2 print(lst[1:]) # 切片 → [2,3] # 其他常用 lst.sort() # 排序 → [2,3,100] lst.reverse() # 反转 → [100,3,2] print(len(lst)) # 长度 → 3 print(sum(lst)) # 求和 → 105 # 打印 print(lst) # 带括号 → [100, 3, 2] print(*lst) # 不带括号 → 100 3 2 # 3. 元组 tuple不可变 tup (1, 2, 3, 2) # 只能查不能增删改 print(tup[0]) # 取元素 → 1 print(tup[1:3]) # 切片 → (2,3) print(tup.count(2)) # 统计元素出现次数 → 2 print(tup.index(3)) # 找元素索引 → 2 # 元组不能修改下面这行会报错 # tup[0] 100 # 4. 集合 set无重复、无序 s {1, 2, 3, 2} # 自动去重 → {1,2,3} # 增 s.add(4) # 添加 → {1,2,3,4} # 删 s.remove(2) # 删除元素 → {1,3,4} # 常用功能 print(3 in s) # 判断是否存在 → True print(len(s)) # 长度 → 3 # 集合运算 a {1,2,3} b {3,4,5} print(a b) # 交集 → {3} print(a | b) # 并集 → {1,2,3,4,5} print(a - b) # 差集 → {1,2} # 5. 字典 dict键值对 d {name: 小明, age: 18} # 查 print(d[name]) # 取值 → 小明 print(d.get(age)) # 安全取值 → 18 # 改/增 d[age] 20 # 修改 d[gender] 男 # 添加 # 遍历 print(d.keys()) # 所有键 → dict_keys([name, age, gender]) print(d.values()) # 所有值 print(d.items()) # 所有键值对 # 删除 del d[gender] print(d)六.函数# 1. 最简单的函数 def say_hello(): print(你好函数) say_hello() say_hello() # 2. 带参数的函数 def print_name(name): print(我的名字是, name) print_name(张三) print_name(李四) def add(a, b): print(a, , b, , a b) add(3, 5) add(10, 20) # 3. 带返回值 return def add(a, b): return a b res add(4, 6) print(结果是, res) print(add(1, 2) add(3, 4)) # 4. 返回多个值 def get_info(): return 小明, 18, 男 name, age, gender get_info() print(name, age, gender) # 5. 默认参数 def power(x, n2): return x ** n print(power(3)) print(power(2, 3)) # 6. 关键字参数 def info(name, age): print(name, age) info(小明, 18) info(age20, name小红) # 7. 局部变量和全局变量 x 100 def test(): x 10 print(函数内x, x) test() print(函数外x, x) # 8. 使用 global 修改全局变量 x 10 def change(): global x x 100 change() print(x) # 9. 列表作为参数 def add_num(lst): lst.append(99) a [1, 2, 3] add_num(a) print(a) # 10. 函数嵌套 def outer(): def inner(): print(我是内部函数) inner() outer()七.lambda匿名函数的用法lambda也叫匿名函数简单来说就是一句话写完一个函数基本用法如下lambda 参数: 表达式注只能有一行表达式自动返回表达式结果适合简单逻辑复杂逻辑还是用 defdef add(a,b): return ab nint(input()) mint(input()) print(add(m,n)) addlambda a,b:ab print(add(m,n))八.python内置排序与lambda的结合8.1. list.sort()原地排序list.sort()的特点是直接修改原列表不会返回新列表返回 None更快、更省内存a [3, 1, 2] a.sort() # 直接在原列表上排序 print(a) # [1, 2, 3]8.2.sorted(列表)生成新的列表a[1,2,3,4,5,7,9,28,39,21,17] bsorted(a) print(b)8.3.排序中的其他用法# # 语法格式sorted(iterable, key None, reverse False) # # -------------------------- # 1. 基础用法只传 iterable默认升序keyNone, reverseFalse # -------------------------- # 对列表排序最常用 nums [5, 3, 8, 6, 7] new_nums sorted(nums) # 只传iterable默认升序返回新列表 print( 1. 基础升序排序 ) print(原列表nums, nums) # 原列表不变[5, 3, 8, 6, 7] print(排序后new_nums, new_nums, \n) # 新列表[3, 5, 6, 7, 8] # 对元组排序返回新列表 tup (9, 1, 4, 2) print(元组排序结果, sorted(tup), \n) # [1, 2, 4, 9] # 对字符串排序按ASCII码升序 s python print(字符串排序结果, sorted(s), \n) # [h, n, o, p, t, y] # -------------------------- # 2. reverse 参数控制升序/降序 # -------------------------- nums [5, 3, 8, 6, 7] print( 2. reverse参数控制升降序 ) print(默认升序reverseFalse, sorted(nums)) # [3, 5, 6, 7, 8] print(显式升序, sorted(nums, reverseFalse)) # 结果一致 print(降序reverseTrue, sorted(nums, reverseTrue), \n) # [8, 7, 6, 5, 3] # 字符串降序示例 words [apple, banana, kiwi] print(字符串降序, sorted(words, reverseTrue), \n) # [kiwi, banana, apple] # -------------------------- # 3. key 参数内置函数作为排序规则 # -------------------------- # 示例1按字符串长度排序keylen内置函数len()取长度 words [apple, banana, kiwi, cherry] print( 3. key内置函数按长度排序 ) print(按长度升序, sorted(words, keylen)) # [kiwi, apple, cherry, banana] print(按长度降序, sorted(words, keylen, reverseTrue), \n) # 示例2按绝对值排序keyabs内置函数abs()取绝对值 nums_abs [-5, 3, -8, 6, -7] print(按绝对值升序, sorted(nums_abs, keyabs), \n) # [3, -5, 6, -7, -8] # -------------------------- # 4. key 参数lambda 匿名函数最灵活蓝桥杯必考 # -------------------------- # 示例1二维列表/元组列表按第二个元素排序 students [(小明, 18), (小红, 16), (小刚, 20)] print( 4. keylambda自定义排序规则 ) print(按年龄升序, sorted(students, keylambda x: x[1])) print(按年龄降序, sorted(students, keylambda x: x[1], reverseTrue), \n) # 示例2字典按值排序 d {a: 3, b: 1, c: 2} print(字典按值升序, sorted(d.items(), keylambda x: x[1]), \n) # [(b, 1), (c, 2), (a, 3)] # 示例3按字符串最后一个字符排序 words [apple, banana, kiwi, cherry] print(按最后一个字符升序, sorted(words, keylambda x: x[-1]), \n) # [banana, apple, kiwi, cherry] # -------------------------- # 5. key 参数自定义函数作为排序规则 # -------------------------- # 自定义函数按奇偶性排序偶数在前奇数在后 def sort_by_odd_even(x): return x % 2 # 偶数返回0奇数返回1 → 01偶数排前面 nums_odd_even [5, 3, 8, 6, 7, 2] print( 5. key自定义函数按奇偶排序 ) print(排序结果, sorted(nums_odd_even, keysort_by_odd_even), \n) # [8, 6, 2, 5, 3, 7] # -------------------------- # 6. 补充sorted() 与 list.sort() 核心区别代码对比 # -------------------------- lst [3, 1, 2] print( 6. sorted() 与 list.sort() 区别 ) # list.sort()原地排序修改原列表返回None lst.sort() print(list.sort()后原列表, lst) # [1, 2, 3] print(list.sort()返回值, lst.sort(), \n) # None # sorted()不修改原列表返回新列表 lst2 [3, 1, 2] new_lst2 sorted(lst2) print(sorted()后原列表lst2, lst2) # [3, 1, 2]不变 print(sorted()返回的新列表, new_lst2) # [1, 2, 3]8.4.python内置排序与lambda的结合以第二个字符串的索引进行升序排序# 原始字符串列表 words [apple, banana, kiwi, cherry] # 核心用lambda作为key按每个字符串的第2个字符索引1升序排序 # lambda x: x[1] → 对列表里的每个元素x取它的第2个字符Python索引从0开始 sorted_words sorted(words, keylambda x: x[1]) # 打印排序结果 print(sorted_words) # 输出[banana, cherry, kiwi, apple]在这里很多人对于这个x的出现不是很理解其实这只是对lambda的底层逻辑没有弄清楚因为在这里sorted会自动把每个单词传给x# 这就是 lambda 背后干的事情 def get_key(x): return x[1] words [apple, banana, kiwi, cherry] # sorted 会自动把每个单词传给 x print(get_key(apple)) # x apple → p print(get_key(banana)) # x banana → a print(get_key(kiwi)) # x kiwi → i print(get_key(cherry)) # x cherry → h九.列表推导器列表推导器的应用场景十分广泛以下是它的公式以及使用的示例# 标准格式[expression for item in iterable if condition] # 拆解 # expression → 最终生成列表元素的表达式 # item → 可迭代对象里的每个元素 # iterable → 列表、字符串、range等可迭代对象 # condition → 可选过滤元素的条件满足才保留应用例子举例# # 列表推导式 全场景示例汇总 # # 1. 基础用法生成1-10的平方列表 print( 1. 基础平方列表 ) squares [i**2 for i in range(1, 11)] print(squares, \n) # 2. 带过滤过滤1-20的偶数 print( 2. 过滤偶数 ) evens [i for i in range(1, 21) if i % 2 0] print(evens, \n) # 3. 输入处理字符串列表转整数列表 print( 3. 输入转整数列表输入1 2 3 4 5) # input_data [int(x) for x in input().split()] # 模拟输入 input_str 1 2 3 4 5 input_data [int(x) for x in input_str.split()] print(input_data, \n) # 这里要重点注意的是如果原来已经有123.....这样的数的时候在操作的时候要用range如果没有则不用range # 4. 嵌套生成3×3零矩阵 print( 4. 3×3零矩阵 ) n 3 zero_matrix [[0 for _ in range(n)] for _ in range(n)] print(zero_matrix, \n) # 5. 嵌套二维列表展平 print( 5. 二维列表展平 ) matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flatten [x for row in matrix for x in row] print(flatten, \n) # 6. 斐波那契数列 print( 6. 斐波那契数列长度10) n 10 fib [0, 1] [fib.append(fib[-1] fib[-2]) for _ in range(n - 2)] print(fib, \n) # 7. 字典推导式统计字符出现次数 print( 7. 字符统计字典推导式) s algorithm char_count {char: s.count(char) for char in set(s)} print(char_count, \n) # 8. 多条件过滤 print( 8. 多条件过滤1-30中能被3整除且10) result [i for i in range(1, 31) if i % 3 0 and i 10] print(result)此外斐波那契数列还有另外一种常规的写法n10 fib[0,1] for i in range(n-2): xfib[-1]fib[-2] fib.append(x) print(fib)在用列表推导器的时候尤其要注意Python 中所有修改列表的方法append、sort、reverse 等返回值都是 Nonelst [1, 2, 3] # 把 append 的返回值存起来 res lst.append(4) print(res 的值, res) # 输出res 的值 None print(修改后的列表, lst) # 输出修改后的列表 [1, 2, 3, 4]十.range函数以下是range函数的基本使用方法# # Python range() 用法全集 # # 1. 只有一个参数range(结束值) # 从 0 开始到 结束值-1步长 1 print(1. range(5)) print(list(range(5))) # [0,1,2,3,4] # 2. 两个参数range(开始, 结束) # 从 开始 到 结束-1步长 1 print(\n2. range(2, 8)) print(list(range(2, 8))) # [2,3,4,5,6,7] # 3. 三个参数range(开始, 结束, 步长) print(\n3. range(1, 10, 2)) print(list(range(1, 10, 2))) # [1,3,5,7,9] # 4. 倒序步长为负数 print(\n4. range(10, 0, -1)) print(list(range(10, 0, -1))) # [10,9,8,...,1] # 5. range 最常用循环固定次数 print(\n5. 循环 3 次) for i in range(3): print(循环, i) # 6. 配合列表推导式 print(\n6. 生成 1~5 的平方) lst [i*i for i in range(1,6)] print(lst) # [1,4,9,16,25] # 7. 遍历列表索引 print(\n7. 遍历列表索引) a [apple, banana, kiwi] for i in range(len(a)): print(i, a[i]) # 8. 重要规则左闭右开不包含结束值 print(\n8. 想输出 1~10 必须写 range(1,11)) print(list(range(1, 11)))用range写二维网格坐标row6 low4 su[(i,j) for i in range(row) for j in range(low)] print(su)十一.栈主要用于之后的DFS特点先进后出LIFO用法 用普通列表 [] 就行append 加右边pop 删右边。# # 栈 (Stack) # 规则先进后出 (Last In First Out) # 操作只在一端右边进出 # # 1. 初始化栈 stk [] # 2. 入栈 (push)往右边加 stk.append(1) stk.append(2) stk.append(3) print(入栈后队列:, stk) # 输出[1, 2, 3] # 3. 获取栈顶看一眼最上面的数不删除 top stk[-1] print(当前栈顶:, top) # 输出3 (最后加进去的) # 4. 出栈 (pop)删掉右边的数 x stk.pop() print(弹出的元素:, x) # 输出3 (先进后出最后进去的先出来) print(出栈后队列:, stk) # 输出[1, 2] # 5. 判断栈是否为空 (if not stk) if not stk: print(栈是空的) else: print(栈不为空) # 6. 快速翻转栈 (切片技巧) print(翻转栈:, stk[::-1])十二.队列与双端队列主要用于之后的BFS特点先进先出FIFO用法 必须用 dequeappend 加右边popleft 删左边列表做这个是很慢的deque 是最快的。# # 队列 (Queue) 双端队列 (Deque) # 规则先进先出 (First In First Out) # 工具from collections import deque # # 1. 导入模块 from collections import deque # 2. 初始化队列 # 一次性初始化deque([1,2,3]) q deque([1, 2, 3]) # 3. 入队 (append)往右边加 q.append(4) q.append(5) print(入队后队列:, list(q)) # 输出[1, 2, 3, 4, 5] # 4. 出队 (popleft)从左边删 # 必须用 popleft不要用 pop(0)太慢 x q.popleft() print(弹出的元素:, x) # 输出1 (先进先出最早进去的先出来) print(出队后队列:, list(q)) # 输出[2, 3, 4, 5] # 5. 快速判空 (if not q) if not q: print(队列为空) else: print(队列不为空) # 6. 双端队列特殊操作左右都能加删 # 从左边入队 q.appendleft(0) print(从左边入队:, list(q)) # 输出[0, 2, 3, 4, 5] # 7. 队列转列表 print(队列转列表:, list(q))也就是说栈用的就是单独的列表而列队用的则是特定的deque

更多文章