看不到代码请重新刷新此页面

快读模版,可以提高读入数据效率

import sys
input = lambda:sys.stdin.readline().strip
  1. import sys

    1. 导入 Python 的 sys 模块,用于访问与 Python 解释器相关的变量和函数。

  2. sys.stdin.readline()

    1. sys.stdin 是标准输入流,readline() 方法用于从输入流中读取一行内容。

    2. 与内置的 input() 函数不同,sys.stdin.readline() 不会自动去除行末的换行符。

  3. .strip()

    1. 去除字符串首尾的空白字符(包括换行符、空格等)。

  4. lambda: ...

    1. 定义一个匿名函数,并将其赋值给变量 input

    2. 这样,每次调用 input() 时,都会执行 sys.stdin.readline().strip()

使用场景:

  • 算法竞赛:在需要高效读取大量输入时,sys.stdin.readline() 比内置的 input() 更快。

  • 批量输入处理:当输入数据有多行时,可以结合循环使用。

内置排序

列表的sort()方法

sort()是列表对象的一个方法,它会原地修改列表,直接排序,不返回新的列表。

list.sort(key=None,resverse = False)

key:排序规则,类sisorted()的key

resverse:是否反向排序,默认为False

nums = [5,3,8,6,7]
nums.sort()  #原地升序排序
print(nums)  #[3, 5, 6, 7, 8]

word = ['apple','banana','kiwi','cherry']
word.sort(key= len)  #按照字符串长度来排序
print(word)   #['kiwi', 'apple', 'banana', 'cherry']

lambda表达式

x = lambda a:a + 10
print(x(5))

这里的,lambda是python的关键字,用于定义lambda函数。参数是参数列表,可以包含零个或多个参数,但必须在冒汗(:)前指定。

表达式是一个用于计算机并返回函数结果的表达式

例如,创建一个lambda函数,他接受一个参数并返回该参数10的结果:

获得中位数

get_mid = lambda nums:nums[len(nums)//2]
print(get_mid([1,2,3,4,5]))

按照第二个字符排序

使用lambda表达式与排序

有时我们需要更加灵活的排序方式,可以使用lambda表达式作为key参数指定排序规则。

words = ['apple','banana','kiwi','cherry']
sorted_words = sorted(words,key=lambda x:x[1])
print(sorted_words) #['kiwi', 'apple', 'banana', 'cherry']

***输入

# 示例1:单行多个整数
a,b,c = map(int,input().split())
print(a,b,c)

# 示例2:多行多个整数
n = int(input())
lst = [int(input()) for _ in range(n)] #读取n行整数
print(lst)

# 示例3:矩阵输入
n,m = map(int,input().split())  #输入矩阵大小
matrix = [list(map(int,input().split()))for _ in range(n)]
print(matrix)

算法步骤

找一个基准值x

把列表分成三部分:小于等于x的数字,x,大于x的数字

左半部分和右半部分递归使用该策略

例如:a = 【3,5,8,1,2,9,4,7,6】

找到基准值3,【1,2】3【5,8,9,4,7,6】

左半部分【1,2】作为一个子问题求解

右部分作为【5,8,9,4,7,6】

例如:a = 【3,5,8,1,2,9,4,7,6】,left = 0,right = 8

设置基准值下标为left

存放小于等于基准值下标为idx = left+1

从left+1到right每个元素a[i]:

如果a[i]<=基准值:则将a[i],a[idx]互换,idx+=1

最终结果【2,1】【3】【5,8,9,5,7,6】

左侧和右侧重复上述操作

**列表推导器

expression for item in iterable if condition

这是一个 列表推导式(List Comprehension) 的语法结构(也适用于其他推导式,如集合、字典或生成器表达式)。它的作用是从一个可迭代对象(如列表、元组等)中筛选和处理元素,生成一个新的列表(或其他数据结构)。

语法结构分解:

[expression for item in iterable if condition]

(注:方括号 [] 表示生成列表,其他推导式可能用 {}()

  1. expression对当前迭代项 item 的处理表达式,结果会加入最终生成的列表。(例如:x * 2 或函数调用 func(x)

  1. for item in iterable遍历可迭代对象 iterable,每次迭代的当前元素赋值给变量 item。(例如:for x in [1, 2, 3]

  1. if condition(可选)过滤条件:只有满足 conditionitem 才会被处理并加入结果列表。(例如:if x % 2 == 0 筛选偶数)


执行顺序:

  1. 遍历 iterable 中的每个 item

  2. 检查 if condition 是否为 True

  3. 若条件满足,计算 expression 并将结果加入最终列表。


示例:

# 生成 0-9 中偶数的平方组成的列表
squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares)  # 输出: [0, 4, 16, 36, 64]

其他形式的推导式:

  1. 集合推导式(去重):

    {x for x in iterable if condition}
  1. 字典推导式(键值对):

    {key: value for item in iterable if condition}
  1. 生成器表达式(惰性计算):

    (x for x in iterable if condition)

注意事项:

  • condition 不满足,当前 item 会被直接跳过。

  • 可以嵌套多个 for 循环或 if 条件(但需保持可读性)。

  • 若需要 else 分支,需将条件逻辑放在 expression 中:

    [x if condition else y for item in iterable]

expression:表达式,用于生产列表中的元素

item:可迭代对象中的每个元素

itrable:可迭代对象

condition:可选,用于过滤元素的条件

示例1:生成1 到 10 的平方列表

squares = [i**2 for i in range(1,11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

示例2:过滤出 1 到 20 中的偶数

evens = [i for i in range(1,21)if i % 2 == 0]
# [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

示例3:将输入的字符串列表转换为整数列表

input_data = list(map(int,input().split()))
# 使用列表推导器实现
input_data = [int(x) for x in input().split()]

# 1 2 3 4 5
# [1, 2, 3, 4, 5]

**斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列( [1]),因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:0、1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

冒泡排序