01_列表

列表

初始化与创建

# 自动初始化为全0
a = [0] * n

# 二维列表(注意:不能用 [[0]*m]*n,是浅拷贝!)
grid = [[0] * m for _ in range(n)]

# 列表推导式
squares = [x * x for x in range(n)]
evens = [x for x in range(n) if x % 2 == 0]

# 基本格式: [表达式 for 变量 in 可迭代对象 if 条件]
# 示例: 读取 q 行整数
S_list = [int(input()) for _ in range(q)]

增删改操作

# 尾部操作(O(1))
a.append(x)      # 尾部添加
a.pop()          # 尾部删除

# 头部操作(O(n),慎用!)
a.insert(0, x)   # 头部插入
a.pop(0)         # 头部删除

# 任意位置
a.insert(i, x)   # 在位置 i 插入
a.pop(i)         # 删除位置 i 的元素
a.remove(x)      # 删除值为 x 的第一个元素

# 批量操作
a.extend([1, 2, 3])    # 追加多个元素
a += [1, 2, 3]         # 同上
a.clear()              # 清空列表

查询操作

# 最大/最小值
mx = max(a)
mn = min(a)
idx = a.index(max(a))  # 最大值的索引

# 统计
a.count(x)      # 元素 x 出现的次数
len(a)          # 列表长度

# 检查存在
x in a          # O(n) 操作,频繁查询建议用 set
x not in a

# 查找索引
a.index(x)      # 返回第一个 x 的索引,不存在会报错
a.index(x, start, end)  # 在指定范围内查找

# 累加求和
sum(a)

# enumerate - 同时获取索引和值
for i, val in enumerate(arr): 
	print(f"索引 {i}: 值 {val}")
	
# 2. zip - 并行遍历多个列表 
for a, b in zip(list1, list2): 
	print(a, b)

排序操作

# 原地排序
a.sort()                # 升序
a.sort(reverse=True)    # 降序

# 返回新列表
b = sorted(a)
b = sorted(a, reverse=True)

# 多关键字排序
a.sort(key=lambda x: (-x[0], x[1]))  # 第一项降序,第二项升序

# 多列表打包排序(同步排序)
x = [3, 1, 2]
y = ['c', 'a', 'b']
sorted(zip(x, y))  # → [(1, 'a'), (2, 'b'), (3, 'c')]

切片与反转

# 切片(不修改原列表)
a[start:end]      # [start, end),左闭右开
a[start:end:step] # 带步长
a[::-1]           # 反转
a[::2]            # 隔一个取一个
a[-1]             # 最后一个元素
a[-3:]            # 最后三个元素

# 反转(修改原列表)
a.reverse()       # 原地反转
a = a[::-1]       # 创建新列表

01_列表
https://mingsm17518.github.io/2026/09/14/算法学习/01_数据结构/01_列表/
作者
Ming
发布于
2026年9月14日
许可协议