在刷算法题时,Python 的列表(list)是非常常用的数据结构。列表的操作灵活且功能丰富,非常适合用来处理数组、队列、堆栈等问题。以下总结了常用的列表语法和在算法题中会用到的场景:
1. 列表的创建
-
直接创建
lst = [1, 2, 3, 4]
-
列表推导式
squares = [x ** 2 for x in range(5)] # [0, 1, 4, 9, 16] even_numbers = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
-
初始化固定大小列表
lst = [0] * 5 # [0, 0, 0, 0, 0]
2. 列表的基本操作
-
访问元素
lst = [10, 20, 30] first = lst[0] # 10 last = lst[-1] # 30
-
修改元素
lst[1] = 25 # lst becomes [10, 25, 30]
-
追加元素
lst.append(40) # lst becomes [10, 25, 30, 40]
-
插入元素
lst.insert(1, 15) # lst becomes [10, 15, 25, 30, 40]
-
删除元素
lst.pop() # 删除最后一个元素,返回40,lst变为[10, 15, 25, 30] lst.pop(1) # 删除索引1处的元素,返回15,lst变为[10, 25, 30] lst.remove(25) # 删除值为25的元素,lst变为[10, 30]
3. 切片操作
-
基本切片
lst = [1, 2, 3, 4, 5] lst[1:4] # [2, 3, 4] lst[:3] # [1, 2, 3] lst[3:] # [4, 5] lst[::-1] # [5, 4, 3, 2, 1] 反转
-
切片赋值
lst[1:3] = [10, 20] # lst becomes [1, 10, 20, 4, 5]
4. 遍历列表
-
普通遍历
for x in lst: print(x)
-
索引和值同时遍历
for i, x in enumerate(lst): print(i, x)
5. 常用列表操作
-
求长度
n = len(lst) # 返回列表的长度
-
求最值
max_val = max(lst) min_val = min(lst)
-
求和
total = sum(lst)
-
检查存在性
if 10 in lst: print("10 exists")
-
排序
lst.sort() # 就地升序排序 lst.sort(reverse=True) # 就地降序排序 sorted_lst = sorted(lst) # 返回排序后的新列表
6. 列表推导式的应用
列表推导式是算法题中非常高效且简洁的写法。
-
过滤数据
nums = [1, 2, 3, 4, 5] evens = [x for x in nums if x % 2 == 0] # [2, 4]
-
嵌套列表推导式
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flatten = [x for row in matrix for x in row] # [1, 2, 3, 4, 5, 6, 7, 8, 9]
7. 二维列表
刷算法题中,二维列表经常用来表示矩阵或图。
-
创建二维列表
matrix = [[0] * 3 for _ in range(3)] # 创建一个3x3的矩阵
-
访问二维列表元素
val = matrix[1][2] # 访问第2行第3列
-
遍历二维列表
for row in matrix: for val in row: print(val)
8. 列表的算法题常见场景
-
滑动窗口
for i in range(len(nums) - k + 1): window = nums[i:i+k] # 提取长度为k的窗口
-
双指针
left, right = 0, len(nums) - 1 while left < right: if nums[left] + nums[right] == target: break
-
堆栈模拟
stack = [] for num in nums: while stack and num > stack[-1]: stack.pop() stack.append(num)
-
矩阵遍历
for i in range(len(matrix)): for j in range(len(matrix[0])): print(matrix[i][j])
-
构建累加和数组
prefix_sum = [0] * (len(nums) + 1) for i in range(len(nums)): prefix_sum[i + 1] = prefix_sum[i] + nums[i]
9. 总结
列表是刷算法题中最常用的数据结构之一。掌握列表的操作和技巧,如切片、推导式、遍历、排序等,可以大幅提升代码的简洁性和效率。结合具体场景(如滑动窗口、双指针、二维矩阵遍历),能够更快速地解决问题。
标签:10,matrix,nums,python,列表,lst,25 From: https://www.cnblogs.com/lmc7/p/18658443