mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1298 字
3 分钟
python竞赛常用模块总结
2026-01-31
统计加载中...

python竞赛常用模块总结#

一.快速读取输入#

使用sys模块,读取效率较高,推荐使用。

简单快读模板#

重新定义input函数,使读取效率加快。

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

快速读取一行sys.stdin.readline()#

import sys
# 读取一行,包含末尾的\n
line = sys.stdin.readline()
# 去掉首尾换行符
line = sys.stdin.readline().strip()
# 读取整数
n = int(sys.stdin.readline())
# 读取多个整数
a, b = map(int, sys.stdin.readline().split())

快速读取所有输入sys.stdin.read()#

import sys
# 读取所有输入,返回一个字符串
all_input = sys.stdin.read()
# 常用模式:按空白字符分割
data = sys.stdin.read().split()
# 转换为整数列表
numbers = list(map(int, sys.stdin.read().split()))

二.常用数学函数#

内置数学函数#

基本数学运算#

函数名称说明示例
abs(x)绝对值函数返回x的绝对值abs(-5) → 5
pow(x, y[, z])快速幂pow(x, y)返回xyx^y
pow(x, y, z)返回xymodzx^y \bmod z
pow(2, 3) → 8, pow(2, 3, 5) → 3
round(x,n)四舍五入round(x)保留整数
round(x, n)保留n位小数
round(3.14) → 3
round(3.14159, 2) → 3.14
divmod(x, y)整除函数返回(x//y, x%y)divmod(7, 2) → (3, 1)

进制转换#

函数名称说明示例
bin(x)二进制转换返回整数x的二进制表示bin(10) → '0b1010'
oct(x)八进制转换返回整数x的八进制表示oct(10) → '0o12'
hex(x)十六进制转换返回整数x的十六进制表示hex(10) → '0xa'

math模块#

导入math模块

import math

基本数学运算#

函数/常量名称说明示例
sqrt(x)平方根返回x的平方根sqrt(4) → 2.0
ceil(x)向上取整返回大于等于x的最小整数ceil(3.14) → 4
floor(x)向下取整返回小于等于x的最大整数floor(3.99) → 3

数论函数#

函数名称说明示例
gcd(a, b)最大公约数返回a和b的最大公约数gcd(12, 18) → 6
lcm(a, b)最小公倍数返回a和b的最小公倍数lcm(4, 6) → 12
comb(n, k)组合数返回CnkC_n^kcomb(5, 2) → 10
perm(n, k)排列数返回PnkP_n^kperm(5, 2) → 20
factorial(n)阶乘返回n!n!factorial(5) → 120

数学常量#

常量名称说明示例
pi圆周率数学常量πpi → 3.14159...
e自然对数底数学常量ee → 2.71828...
inf无穷大正无穷大inf → inf
nan非数字非数字值nan → nan

其他函数#

函数名称说明示例
isqrt(x)整数平方根返回x的整数平方根isqrt(16) → 4
dist(p, q)距离返回两点之间的欧几里得距离dist((0,0), (3,4)) → 5.0

三.is判断函数#

判断字符串是否满足某种条件,返回True或False。

字符串判断方法(str对象方法)#

字符类型判断#

方法名称说明示例
isalnum()字母数字判断字符串是否由字母和数字组成"abc123".isalnum() → True
isalpha()字母判断字符串是否只由字母组成"abc".isalpha() → True
isdecimal()十进制数字字符串是否只包含十进制数字"123".isdecimal() → True
isdigit()数字判断字符串是否只包含数字"123".isdigit() → True

格式与大小写判断#

方法名称说明示例
islower()小写判断字符串是否至少有一个字母且所有字母都是小写"abc".islower() → True
isupper()大写判断字符串是否至少有一个字母且所有字母都是大写"ABC".isupper() → True
istitle()标题判断字符串是否每个单词首字母大写"Hello World".istitle() → True

常用数据结构模块#

导入collections模块

from collections import deque, Counter

常用数据结构

类/函数名称说明示例
deque双端队列线程安全,快速从两端添加或删除元素deque([1,2,3])
Counter计数器统计可哈希对象Counter('abcabc')

deque 双端队列#

方法说明示例
deque()初始化创建一个新的双端队列
append(x)右端添加xd.append(4)
appendleft(x)左端添加xd.appendleft(0)
pop()右端弹出d.pop() → 4
popleft()左端弹出d.popleft() → 0
extend(iterable)右端扩展d.extend([5,6])
extendleft(iterable)左端扩展d.extendleft([-1,-2])
rotate(n)旋转n步d.rotate(1)
clear()清空队列d.clear()

Counter 计数器#

方法说明示例
Counter()初始化创建一个新的计数器,可以像字典一样使用
most_common(n)前n个最常见元素Counter('abracadabra').most_common(3)[('a', 5), ('b', 2), ('r', 2)]
total()计数总和Counter('abc').total() → 3

堆操作#

导入heapq模块

import heapq

堆默认为最小堆,即堆顶为最小元素。

函数名称说明示例
heapify(x)堆化将列表x转换为堆heapify([3,1,2]) → 堆为[1,3,2]
heappush(heap, item)入堆将item加入堆heappush(heap, 4)
heappop(heap)出堆弹出并返回堆顶元素heappop(heap) → 1
heappushpop(heap, item)先入后出将item入堆然后弹出堆顶heappushpop(heap, 0) → 0
heapreplace(heap, item)先出后入弹出堆顶然后将item入堆heapreplace(heap, 5) → 1
nlargest(n, iterable)前n个最大返回iterable中前n个最大元素nlargest(3, [1,5,2,4,3]) → [5,4,3]
nsmallest(n, iterable)前n个最小返回iterable中前n个最小元素nsmallest(3, [1,5,2,4,3]) → [1,2,3]

二分查找#

导入bisect模块

import bisect

这些函数用于在已排序的列表中进行二分查找。

函数名称说明示例
bisect_left(a, x)左插入点返回第一个大于等于x的索引bisect_left([1,2,4], 2) → 1
bisect(a, x)右插入点返回第一个大于x的索引bisect([1,2,4], 2) → 2
insort_left(a, x)左插入找到第一个大于等于x的索引,将x插入该位置insort_left([1,2,4], 2) → [1,2,2,4]
insort(a, x)右插入找到第一个大于x的索引,将x插入该位置insort([1,2,4], 2) → [1,2,2,4]

迭代与序列#

所有函数概览表

函数名称说明时间复杂度示例
len()获取长度返回对象长度(元素个数)O(1)len([1,2,3]) → 3
reversed()反转序列返回序列的反向迭代器O(1)list(reversed([1,2,3])) → [3,2,1]
sorted()排序返回排序后的新列表O(n log n)sorted([3,1,2]) → [1,2,3]
enumerate()枚举返回(索引, 元素)对的迭代器O(1)list(enumerate(['a','b'])) → [(0,'a'),(1,'b')]
zip()组合将多个可迭代对象组合成元组迭代器O(1)list(zip([1,2],['a','b'])) → [(1,'a'),(2,'b')]
slice()创建切片对象创建切片对象用于扩展切片O(1)arr[slice(1,3)]
filter()过滤过滤可迭代对象,保留满足条件的元素O(n)list(filter(lambda x: x>0, [-1,0,1,2])) → [1,2]
map()映射对可迭代对象的每个元素应用函数O(n)list(map(str, [1,2,3])) → ['1','2','3']
all()所有为真所有元素都为真时返回TrueO(n)all([True, True]) → True
any()任一为真任一元素为真时返回TrueO(n)any([False, True]) → True

reversed()-反转序列#

# 反转列表(返回迭代器)
list(reversed([1, 2, 3])) # [3, 2, 1]
# 反转字符串
list(reversed("abc")) # ['c', 'b', 'a']
# 反转范围对象
list(reversed(range(5))) # [4, 3, 2, 1, 0]
# 与切片反转对比
arr = [1, 2, 3]
arr[::-1] # [3, 2, 1](返回新列表)
reversed(arr) # <list_reverseiterator>(返回迭代器)
# 遍历反向迭代器
for item in reversed([1, 2, 3]):
print(item) # 3, 2, 1

特点

  • 返回迭代器,节省内存
  • 原始序列不会被修改


enumerate()-枚举索引#

# 基本用法
list(enumerate(['a', 'b', 'c'])) # [(0, 'a'), (1, 'b'), (2, 'c')]
# 指定起始索引
list(enumerate(['a', 'b', 'c'], start=1)) # [(1, 'a'), (2, 'b'), (3, 'c')]

zip()-组合多个可迭代对象#

# 组合两个列表
list(zip([1, 2, 3], ['a', 'b', 'c'])) # [(1, 'a'), (2, 'b'), (3, 'c')]
# 长度不等时以最短的为准
list(zip([1, 2, 3], ['a', 'b'])) # [(1, 'a'), (2, 'b')]
# 组合三个列表
list(zip([1, 2], ['a', 'b'], ['x', 'y'])) # [(1, 'a', 'x'), (2, 'b', 'y')]
# 解压(使用*操作符)
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
nums, letters = zip(*pairs) # nums=(1,2,3), letters=('a','b','c')
# 矩阵转置
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed = list(zip(*matrix)) # [(1,4,7), (2,5,8), (3,6,9)]
# 遍历组合
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}") # Alice: 85, Bob: 92, Charlie: 78

slice()-创建切片对象#

# 创建切片对象
s = slice(1, 4) # 等价于 [1:4]
arr = [0, 1, 2, 3, 4, 5]
arr[s] # [1, 2, 3]
# 带步长的切片
s = slice(0, 5, 2) # 等价于 [0:5:2]
arr[s] # [0, 2, 4]
# 省略开始或结束
s = slice(None, 3) # [:3]
arr[s] # [0, 1, 2]
# 动态创建切片
def get_slice(arr, start=None, stop=None, step=None):
s = slice(start, stop, step)
return arr[s]
get_slice([0,1,2,3,4], 1, 4) # [1, 2, 3]
# 获取切片属性
s = slice(1, 5, 2)
s.start # 1
s.stop # 5
s.step # 2

filter()-过滤序列#

# 过滤偶数
nums = [1, 2, 3, 4, 5, 6]
even = list(filter(lambda x: x % 2 == 0, nums)) # [2, 4, 6]
# 过滤非空字符串
words = ['hello', '', 'world', '', '!']
non_empty = list(filter(None, words)) # ['hello', 'world', '!']
# 注意:filter(None, iterable)会过滤掉bool值为False的元素
# 过滤正数
list(filter(lambda x: x > 0, [-2, -1, 0, 1, 2])) # [1, 2]
# 使用函数作为过滤条件
def is_vowel(char):
return char.lower() in 'aeiou'
list(filter(is_vowel, 'hello world')) # ['e', 'o', 'o']
# 惰性求值(返回迭代器)
filtered = filter(lambda x: x > 0, [-1, 0, 1, 2])
next(filtered) # 1

map()-映射函数#

# 转换为字符串
list(map(str, [1, 2, 3])) # ['1', '2', '3']
# 平方运算
list(map(lambda x: x**2, [1, 2, 3, 4])) # [1, 4, 9, 16]
# 多个序列运算
list(map(lambda x, y: x + y, [1, 2, 3], [10, 20, 30])) # [11, 22, 33]
# 内置函数作为映射函数
list(map(abs, [-1, 2, -3, 4])) # [1, 2, 3, 4]
# 多参数函数
def add(a, b, c):
return a + b + c
list(map(add, [1, 2, 3], [10, 20, 30], [100, 200, 300])) # [111, 222, 333]

all()和any()-逻辑判断#

# all(): 所有元素为True时返回True
all([True, True, True]) # True
all([True, False, True]) # False
all([]) # True(空序列)
# any(): 任一元素为True时返回True
any([False, False, True]) # True
any([False, False, False]) # False
any([]) # False(空序列)
# 实际应用
# 检查所有数字是否为正数
all(x > 0 for x in [1, 2, 3, 4]) # True
all(x > 0 for x in [1, 2, -3, 4]) # False
# 检查是否有正数
any(x > 0 for x in [-1, -2, 3]) # True
# 检查所有字符串是否非空
strings = ['hello', 'world', '']
all(strings) # False(空字符串为False)
any(strings) # True
# 结合map使用
all(map(str.isalpha, 'abc123')) # False(有数字)
all(map(str.isalpha, 'abc')) # True
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

python竞赛常用模块总结
https://fairycrane.website/posts/py_mod/
作者
仙鹤
发布于
2026-01-31
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00