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() 构造可哈希键 哈希分组

时间复杂度

相关推荐
cpolar技术支持4 小时前
外网测试机的异常传不回内网?自托管 Sentry,用 cpolar 打通错误上报链路
python·nginx·docker·cpolar·sentry
小小龙学IT4 小时前
Python SQLAlchemy 2.0 深度解析:从 Core 到 ORM 的数据访问双引擎
开发语言·数据库·python
2601_962885724 小时前
如何用 Python 计算 ROC 变动率指标做动量分析?
开发语言·python·算法
在世修行4 小时前
干货:文件上传端点解析
python·fastapi·接收上传
潼心1412o4 小时前
C++初阶(长期更新)第9讲:string(上)
开发语言·c++
朝朝辞暮i5 小时前
C++ 第 39 章: 阶段性总复习——类、对象、构造、继承、this、指针与智能指针
开发语言·c++·算法·ros2
掉进电商坑三年没爬出来的东叔5 小时前
青龙面板进阶:一个面板聚合多平台签到,所有积分自动领
java·开发语言
ZhangJun955 小时前
Mobike 共享单车分析项目
人工智能·python·算法·kmeans·聚类·knn
XLYcmy5 小时前
PDF 论文处理器 — 优势与功能文档
大数据·python·网络安全·pdf·dify·rag·漏洞检测
iCxhust5 小时前
51单片机电力载波应用开发(七)广播通讯
c语言·开发语言·单片机·嵌入式硬件·51单片机