python常用函数

1. list(列表)

列表就是 Python 最常用的数据结构,相当于 C++ 的 vector

创建

复制代码
nums = [3, 1, 2]

获取长度

复制代码
len(nums)

返回

复制代码
3

访问元素

复制代码
nums[0]      # 第一个
nums[-1]     # 最后一个

Python 支持负数索引:

复制代码
nums = [3,1,2]

0 1 2
-3 -2 -1

添加元素

尾部添加(O(1))

复制代码
nums.append(5)

结果

复制代码
[3,1,2,5]

指定位置插入

复制代码
nums.insert(1,100)

结果

复制代码
[3,100,1,2]

时间复杂度 O(n)


删除元素

删除最后一个

复制代码
nums.pop()

返回删除的值

复制代码
x = nums.pop()

例如

复制代码
nums=[3,1,2]

x=nums.pop()

print(x)

输出

复制代码
2

删除指定位置

复制代码
nums.pop(1)

删除指定值

复制代码
nums.remove(2)

如果不存在会报错。


排序

原地排序

复制代码
nums.sort()

降序

复制代码
nums.sort(reverse=True)

返回新的排序结果

复制代码
sorted(nums)

例如

复制代码
nums=[3,2,1]

new_nums=sorted(nums)

print(nums)
print(new_nums)

输出

复制代码
[3,2,1]
[1,2,3]

区别:

sort() 修改原数组
sorted() 返回新数组

这是 LeetCode 经常考的。


翻转

复制代码
nums.reverse()

或者

复制代码
nums[::-1]

推荐:

复制代码
nums[::-1]

不会修改原数组。


求和

复制代码
sum(nums)

最大最小

复制代码
max(nums)

min(nums)

2. String(字符串)

字符串不能修改。

例如

复制代码
s="hello"

不能写

复制代码
s[0]='a'

会报错。


长度

复制代码
len(s)

索引

复制代码
s[0]

切片

复制代码
s[1:4]

结果

复制代码
ell

规则:

复制代码
左闭右开

复制代码
1<=index<4

翻转字符串

复制代码
s[::-1]

这是 LeetCode 高频。


排序

复制代码
sorted(s)

返回

复制代码
['e','h','l','l','o']

如果需要字符串

复制代码
"".join(sorted(s))

得到

复制代码
ehllo

这就是 Group Anagrams 的核心。


split

字符串切割

复制代码
s="a,b,c"

s.split(",")

得到

复制代码
['a','b','c']

join

拼接

复制代码
arr=['a','b','c']

"".join(arr)

得到

复制代码
abc

3. Dictionary(字典)

刷题最重要的数据结构。

相当于 C++ unordered_map。

创建

复制代码
d={}

添加

复制代码
d["a"]=10

修改

复制代码
d["a"]=20

查询

复制代码
d["a"]

如果不存在

会报错。

推荐

复制代码
d.get("a")

不存在返回

复制代码
None

或者

复制代码
d.get("a",0)

不存在返回

复制代码
0

判断是否存在

复制代码
if "a" in d:

不要写

复制代码
if d["a"]:

容易报错。


遍历

复制代码
for key,value in d.items():

例如

复制代码
{
"a":1,
"b":2
}

输出

复制代码
a 1

b 2

4. Set(集合)

特点:

没有重复元素。

创建

复制代码
s=set()

添加

复制代码
s.add(3)

删除

复制代码
s.remove(3)

判断

复制代码
if 3 in s:

复杂度 O(1)


去重

复制代码
nums=list(set(nums))

例如

复制代码
[1,1,2,3]

变成

复制代码
[1,2,3]

注意:

顺序可能改变。


5. Counter

统计频率神器。

复制代码
from collections import Counter

例如

复制代码
nums=[1,2,2,2,3]

cnt=Counter(nums)

得到

复制代码
{
2:3,

1:1,

3:1
}

查询

复制代码
cnt[2]

得到

复制代码
3

出现最多

复制代码
cnt.most_common(2)

得到

复制代码
[(2,3),(1,1)]

非常常见。

例如 Top K Frequent。


6. defaultdict

最推荐使用。

普通字典

复制代码
d={}

需要

复制代码
if key not in d:

    d[key]=[]

defaultdict

复制代码
from collections import defaultdict

d=defaultdict(list)

直接

复制代码
d[key].append(x)

Group Anagrams 就可以写成

复制代码
from collections import defaultdict

d=defaultdict(list)

for word in strs:

    key="".join(sorted(word))

    d[key].append(word)

7. enumerate

以前

复制代码
for i in range(len(nums)):

推荐

复制代码
for i,x in enumerate(nums):

例如

复制代码
nums=[3,5,8]

得到

复制代码
i=0 x=3

i=1 x=5

i=2 x=8

更 Pythonic。


8. zip

两个数组一起遍历。

复制代码
A=[1,2]

B=[3,4]

for x,y in zip(A,B):

    print(x,y)

输出

复制代码
1 3

2 4

矩阵转置也经常用:

复制代码
matrix = [
    [1,2,3],
    [4,5,6]
]

print(list(zip(*matrix)))

输出:

复制代码
[(1,4), (2,5), (3,6)]

* 表示解包,把二维列表的每一行作为参数传给 zip


9. 排序

最重要。

普通

复制代码
nums.sort()

二维数组

复制代码
points.sort(key=lambda x:x[0])

按第二列

复制代码
points.sort(key=lambda x:x[1])

先按第一列再按第二列

复制代码
points.sort(key=lambda x:(x[0],x[1]))

例如

复制代码
[[2,3],
 [1,5],
 [2,1]]

排序后

复制代码
[[1,5],
 [2,1],
 [2,3]]

10. heapq

Python 默认只有最小堆

复制代码
import heapq

加入

复制代码
heapq.heappush(heap,3)

弹最小

复制代码
heapq.heappop(heap)

如果想实现最大堆,可以存负数:

复制代码
heap = []

heapq.heappush(heap, -5)
heapq.heappush(heap, -2)

print(-heapq.heappop(heap))  # 5

11. deque

双端队列。

复制代码
from collections import deque

q=deque()

队尾

复制代码
q.append(3)

队首

复制代码
q.appendleft(5)

左边弹

复制代码
q.popleft()

右边弹

复制代码
q.pop()

BFS、滑动窗口都会用。


12. 二维数组初始化

很多新手会写:

复制代码
grid = [[0] * 3] * 3

看似得到:

复制代码
[
 [0,0,0],
 [0,0,0],
 [0,0,0]
]

但实际上三行引用的是同一个列表

验证:

复制代码
grid = [[0] * 3] * 3
grid[0][0] = 1

print(grid)

输出:

复制代码
[
 [1,0,0],
 [1,0,0],
 [1,0,0]
]

三行都变了。

正确写法:

复制代码
grid = [[0] * 3 for _ in range(3)]

这样每一行都是独立的列表。


背熟的 API

API 用途 高频题型
append() 列表尾部添加 几乎所有题
pop() / popleft() 栈、队列 DFS、BFS
sort() / sorted() 排序 排序、贪心
enumerate() 下标 + 元素遍历 数组
zip() 多数组遍历、矩阵转置 矩阵、字符串
Counter() 统计频率 哈希、Top K
defaultdict(list) 分组 Group Anagrams、图
set() 去重、快速查找 哈希
heapq 优先队列 Top K、合并 K 个链表
deque 双端队列 BFS、滑动窗口
"".join() / split() 字符串拼接与切割 字符串
tuple() 构造可哈希键 哈希分组

时间复杂度

相关推荐
薛定猫AI1 小时前
【技术干货】大模型文档结构化提取实战:Python解析PDF发票并批量生成CSV
java·python·pdf
zhiSiBuYu05171 小时前
RAG 性能优化与缓存策略实战指南
人工智能·python·机器学习
荣码1 小时前
Prompt工程实战:同一个需求换3种写法,效果差10倍
java·python
想会飞的蒲公英2 小时前
集成学习入门:Bagging、Boosting 到底在组合什么
人工智能·python·机器学习·集成学习·boosting
努力努力再努力搬砖2 小时前
批量下载ERA5数据
python
_老码2 小时前
AI-reader阅读助手开发过程
人工智能·python·ai
এ慕ོ冬℘゜2 小时前
深入理解 JavaScript 事件对象:从 target 到 preventDefault 的实战指南
开发语言·前端·javascript
_Jimmy_2 小时前
python性能分析工具
python
学逆向的2 小时前
汇编——修改EIP的值
开发语言·汇编·网络安全