当前位置: 首页 > news >正文

【刷题2025】知识点梳理

1.常用操作

二进制异或 ans = a ^ b

向上取整 math.ceil(a/b)

向下取整 math.floor(a/b)

每次取最低字节:一个字节八位

        while a > 0:
            aSum += a & 0xff  # 累加最低字节的大小
            a >>= 8  # 一个字节八位, a右移八位, 将最低字节移除

正则匹配

# 编译正则表达式,用于匹配以 < 开头、以 > 结尾的字符串片段
# 编译后的对象可以调用 findall、search、match 等方法
regexp = re.compile(r"(<.*?>)")# findall 查找字符串text中所有与正则表达式regexp匹配的子串,并返回一个列表
matchers = re.findall(regexp, text)# search 查找字符串text中第一个与正则表达式regexp匹配的子串,返回一个match对象或None
matchers = re.search(regexp, text)# match 从字符串text起始位置开始匹配正则表达式regex,只检查字符串开头
# 成功返回一个match对象,失败返回None
matchers = re.match(regexp, text)# 替换
pattern = r"\d+"
text = "我有 3 只猫和 2 只狗"# 只替换第一个匹配项
new_text = re.sub(pattern, "X", text, count=1)
print("替换后的文本:", new_text)# Match 对象的常用方法
group():返回匹配的字符串。
group(0):返回整个匹配的字符串。
group(1):返回第一个分组的内容。
group(2):返回第二个分组的内容,依此类推。
start():返回匹配的起始位置。
end():返回匹配的结束位置。
span():返回匹配的范围(起始和结束位置的元组)。import retext = "a(1)b(2)c(3)"
match = re.search(r'\((\d)\)', text)
if match:print(match.group())   # 输出: '(1)'print(match.group(1))  # 输出: '1'print(match.start())   # 输出: 1print(match.end())     # 输出: 4print(match.span())    # 输出: (1, 4)# 检查字符串是否只包含大小写字母和数字
if not re.match(r"^[a-zA-Z0-9]+$", cells[i]):r"(<.*?>)"
<:匹配字符 <。
.:匹配任意字符(除了换行符 \n)。
*:匹配前面的字符 0 次或多次。
?:非贪婪模式,尽可能少地匹配字符。
>:匹配字符 >。
整体表示匹配以 < 开头、以 > 结尾的字符串片段。
使用括号 () 将匹配的内容捕获为一个分组。r"^[a-zA-Z0-9]+$"
^:匹配字符串的开头。
[a-zA-Z0-9]:匹配任意一个字母(大小写)或数字。
a-z:小写字母。
A-Z:大写字母。
0-9:数字。
+:匹配前面的字符(字母或数字)1 次或多次。
$:匹配字符串的结尾。r"[^aeiou][aeiou][^ariour]e"
检测 辅音+元音+辅音(除r以外)+epattern = r"(\d{3})-(\d{2})-(\d{4})"  # 匹配日期格式 123-45-6789. 匹配任意字符(除换行符)
^ 匹配字符串开头
$ 匹配字符串结尾
* 匹配前一个字符 0 次或多次
+ 匹配前一个字符 1 次或多次
? 匹配前一个字符 0 次或 1 次
{n} 匹配前一个字符恰好 n 次
{n,} 匹配前一个字符至少 n 次
{n,m} 匹配前一个字符 n 到 m 次
\d 匹配数字
\D 匹配非数字
\w 匹配字母、数字、下划线
\W 匹配非字母、数字、下划线
\s 匹配空白字符
\S 匹配非空白字符

reg=re.compile("^(01)+0$")

自定义排序:

list.sort(key = lambda x:x[0], reverse=False)# functools.cmp_to_key 的作用是将一个 自定义的比较函数 转换为一个 键函数(key function),
# 以便在 sorted() 或其他排序函数中使用。
# 当比较函数返回 -1、0 或 1 时,排序算法会根据这些返回值来决定元素的顺序。
# 当cmp_to_key返回1时,排序会将a,b顺序调换。
import functoolsdef cmp(a, b):s1 = a + bs2 = b + areturn 0 if s1 == s2 else 1 if s1 > s2 else -1def solution():nums.sort(key=lambda x: int(x))return "".join(sorted(nums[:3], key=functools.cmp_to_key(cmp)))

二分法:

# 左闭右开区间
class Solution:def search(self, nums, target):left, right = 0, len(nums)  # 定义target在左闭右开的区间里,即:[left, right)# 因为left == right的时候,在[left, right)是无效的空间,所以使用 <while left < right:  middle = left + (right - left) // 2if nums[middle] > target:right = middle  # target 在左区间,在[left, middle)中elif nums[middle] < target:left = middle + 1  # target 在右区间,在[middle + 1, right)中else:return middle  # 数组中找到目标值,直接返回下标return -1  # 未找到目标值

字符串判断:

s.isalnum():判断字符是否为数字或字母
s.isdigit():判断字符是否数字
s.isalpha():判断字符是否为字母
s.islower():判断字符是否为小写字母
s.isupper():判断字符是否为大写字母
s.lower():将所有大写字母转换为小写
s.lstrip():截掉左边空格(s.rstrip()、s.strip())
s.replace(s1, s2):将所有s1替换为s2
s.find(c):返回c第一次出现位置,未找到返回-1(s.rfind(c)返回最后一次出现位置)ord("A")  # 返回“A”的ascii码
chr(65)   # 返回ascii码为65的字符

输入输出:

# 循环输出
for c in sorted_dic:print(f"{c}:{dic[c]};", end="")print默认输出换行,如果句末不换行采用end禁用
print(dic, end="")# 检测非法输入
if __name__ == "__main__":try:list = input()print(solve(list))except:print(0)

deque用法:

from collections import deque
dq = deque()
dq.append()
dq.appendleft()
dp.pop()
dq.popleft()
dq.extend()
dq.extendleft()
dq.rotate()

heapq用法:

'''
在 Python 中,heapq 模块提供了堆队列算法的实现,可以用来手动实现一个优先队列。
heapq 是一个最小堆(min-heap),即堆顶元素始终是最小的元素。
通过将元素插入堆中并保持堆的性质,可以实现优先队列的功能。
'''# 1. 导入 heapq 模块
import heapq# 2. 优先队列的基本操作heapq.heappush(heap, item)  # 将元素插入堆中,并保持堆的性质。
heapq.heappop(heap)  # 弹出并返回堆中的最小元素。
heapq.heapify(heap)  # 将列表转换为堆(原地操作)。
heapq.heappushpop(heap, item)  # 将元素插入堆中并弹出最小元素。
heapq.heapreplace(heap, item)  # 弹出最小元素并插入新元素。# 3. 实现优先队列
# 优先队列的核心思想是将元素插入堆中,并根据优先级(通常是元素的第一个值)进行排序。import heapqclass PriorityQueue:def __init__(self):self.heap = []  # 使用列表存储堆self.index = 0  # 用于处理优先级相同的情况def push(self, item, priority):# 将元素插入堆中,优先级由 priority 决定# 使用 (priority, index, item) 来确保相同优先级时按插入顺序处理heapq.heappu

相关文章:

  • Notepad++中将文档格式从Windows(CR LF)转换为Unix(LF)
  • ollama修改配置使用多GPU,使用EvalScope进行模型压力测试,查看使用负载均衡前后的性能区别
  • vue复习46~90
  • designware IP如何被FPGA综合
  • 【控制学】控制学分类
  • 儿童后期至青少年早期脑网络隔离增强的发育机制研究
  • 中国反制关税影响分析、可能性分析
  • 基于Python的PC控制Robot 小程序开发历程
  • 虚拟机ubuntu网络如何使用windows物理机的代理
  • 【差分隐私相关概念】瑞丽差分隐私(RDP)引理1
  • 【差分隐私相关概念】瑞丽差分隐私(RDP)-命题1
  • Web前端开发——图像与多媒体文件(上)
  • 计算机视觉——基于 Yolov8 目标检测与 OpenCV 光流实现目标追踪
  • 在ros2上使用opencv显示一张图片
  • 智能指针(内存泄漏)
  • 高德地图自有数据添加图层
  • Ubuntu安装yum遇到Package ‘yum‘ has no installation candidate
  • CSRF(跨站请求伪造)漏洞概述
  • Windows服务器组建与综合服务部署技术方案
  • C# 使用.NET内置的 IObservable<T> 和 IObserver<T>-观察者模式
  • 申活观察|咖香涌动北外滩,带来哪些消费新想象?
  • 同日哑火丢冠,双骄的下山路,手牵手一起走
  • 是否进行了及时有效处置?伤者情况如何?辽阳市相关负责人就饭店火灾事故答问
  • 郭向阳任广东省公安厅分管日常工作副厅长(正厅级)
  • 国家能源局通报上月投诉情况:赤峰有群众反映电费异常增高,已退费
  • 解放日报:上海深化改革开放,系统集成创新局