计算机概率课程复习(开卷资料)

本文最后更新于 2026年1月27日 晚上

📘《2025年编程模块考试速查手册》

[TOC]

字符串操作

1. 索引与切片

1
2
3
4
5
6
7
8
s = "Python"
s[0] # 'P' (索引从0开始)
s[-1] # 'n' (负索引从-1开始)
s[0:3] # 'Pyt' (切片: [起始:结束:步长])
s[:3] # 'Pyt' (起始默认为0)
s[3:] # 'hon' (结束默认为末尾)
s[::2] # 'Pto' (步长为2)
s[::-1] # 'nohtyP' (反转字符串)

2. 常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
s.split()          # 按空白字符分割为列表
s.split(',') # 按逗号分割
s.strip() # 去除两端空白字符
s.strip('!') # 去除两端指定字符
s.replace('a','b') # 替换字符/子串
s.find('th') # 查找子串,返回索引(-1为未找到)
s.index('th') # 同find,但未找到时报错
s.count('n') # 统计子串出现次数
s.upper()/s.lower()# 转大写/小写
s.isdigit() # 是否全数字
s.isalpha() # 是否全字母
s.startswith('Py') # 是否以指定字符串开头
s.endswith('on') # 是否以指定字符串结尾
','.join(list) # 列表连接为字符串

3. 运算符

1
2
3
s1 + s2     # 字符串拼接
s * 3 # 字符串重复
'a' in s # 判断子串是否存在

文件操作

1. 打开与关闭

1
2
3
4
5
6
7
8
9
10
# 打开文件
f = open('file.txt', 'r', encoding='utf-8') # 读取文本文件
# 模式: 'r'读 'w'写(覆盖) 'a'追加 'b'二进制 't'文本(默认)

# 关闭文件
f.close()

# 使用with自动关闭(推荐)
with open('file.txt', 'r') as f:
content = f.read()

2. 读取文件

1
2
3
4
5
6
7
8
9
10
11
12
# 读取全部内容
content = f.read()

# 读取一行
line = f.readline()

# 读取所有行(返回列表)
lines = f.readlines()

# 逐行读取(推荐)
for line in f:
print(line.strip())

3. 写入文件

1
2
3
4
5
6
7
8
9
# 写入字符串
f.write('Hello\n')

# 写入多行
lines = ['Line1\n', 'Line2\n']
f.writelines(lines)

# 注意: 写入后可能需要刷新缓冲区
f.flush()

4. 文件指针

1
2
3
f.tell()     # 返回当前指针位置
f.seek(0) # 移动指针到文件开头
f.seek(5) # 移动指针到第5个字节

5. 二进制文件

1
2
3
4
5
6
7
# 读取二进制文件
with open('file.bin', 'rb') as f:
data = f.read()

# 写入二进制文件
with open('file.bin', 'wb') as f:
f.write(b'\x00\x01\x02')

6. CSV文件处理

1
2
3
4
5
6
7
8
9
10
11
12
import csv
# 读取CSV
with open('data.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)

# 写入CSV
with open('output.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['Name', 'Age'])
writer.writerow(['Alice', 25])

常用编码

1
2
3
4
utf-8     # 最常用,支持多语言
gbk # 中文编码
ascii # 英文字符
latin-1 # 西欧语言

注意事项

  1. 文件操作后务必关闭或使用with语句
  2. 注意文件路径(相对路径/绝对路径)
  3. 处理中文文件时指定encoding=‘utf-8’
  4. 大文件建议逐行读取,避免内存不足

运算优先级

  1. () 括号(最高)
  2. ** 幂运算
  3. +x -x ~x not 一元运算
  4. * / // % 乘除取余
  5. + - 加减
  6. << >> 移位
  7. & 按位与
  8. ^ 按位异或
  9. | 按位或
  10. < <= > >= == != is in 比较/成员
  11. and 逻辑与
  12. or 逻辑或
  13. = += -= 赋值(最低)
    口决:括号 > 幂 > 正负 > 乘除 > 加减 > 移位 > 位运算 > 比较 > 逻辑 > 条件 > 赋值

一、组合数据类型详解

1. 列表(List)核心操作

创建与基本操作

1
2
3
4
5
6
7
8
9
10
# 创建
lst = [1, 2, 3]
lst2 = list(range(10))
lst3 = [i*2 for i in range(5)] # 列表推导式

# 访问与修改
lst[0] # 访问第一个元素
lst[-1] # 访问最后一个元素
lst[1:4] # 切片访问
lst[1:4] = [10, 20] # 切片修改

增删改查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 增加元素
lst.append(4) # 末尾添加单个
lst.extend([5,6]) # 合并列表
lst.insert(2, 99) # 在索引2处插入99

# 删除元素
lst.remove(99) # 删除第一个匹配值
del lst[0] # 删除索引0的元素
value = lst.pop() # 删除并返回最后一个元素
value = lst.pop(1) # 删除并返回索引1的元素
lst.clear() # 清空列表

# 查找与统计
lst.index(2) # 返回值的索引(无则报错)
lst.count(2) # 统计值出现次数
2 in lst # 判断是否存在

排序与遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 排序
lst.sort() # 原地排序
lst.sort(reverse=True) # 降序排序
sorted_lst = sorted(lst) # 返回新列表
lst.sort(key=lambda x: x%3) # 按自定义规则排序

# 遍历
for i in range(len(lst)): # 方式1:索引遍历
print(i, lst[i])

for item in lst: # 方式2:直接遍历
print(item)

for i, item in enumerate(lst): # 方式3:枚举遍历
print(i, item)

2. 字典(Dict)核心操作

创建与基本操作

1
2
3
4
5
6
7
8
9
10
# 创建
d = {} # 空字典
d = dict() # 空字典
d = {'a': 1, 'b': 2}
d = dict([('a',1), ('b',2)]) # 元组列表转换

# 访问与修改
d['a'] = 10 # 修改或添加
value = d.get('a', 0) # 安全访问,不存在返回0
value = d.setdefault('c', 100) # 不存在则设置默认值并返回

增删改查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 增加/修改
d.update({'c':3, 'd':4}) # 批量更新
d['e'] = 5 # 单个添加

# 删除
del d['a'] # 删除键'a'
value = d.pop('b') # 删除并返回值
key, value = d.popitem() # 删除最后一个键值对
d.clear() # 清空字典

# 查找与遍历
'a' in d # 判断键是否存在
len(d) # 键值对数量

# 遍历
for key in d: # 遍历键
print(key, d[key])

for key in d.keys(): # 明确遍历键
print(key)

for value in d.values(): # 遍历值
print(value)

for key, value in d.items(): # 遍历键值对
print(key, value)

字典进阶操作

1
2
3
4
5
6
7
# 字典推导式
{x: x**2 for x in range(5) if x%2==0}

# 排序
sorted_by_key = dict(sorted(d.items())) # 按键排序
sorted_by_value = dict(sorted(d.items(), key=lambda x: x[1])) # 按值排序
sorted_by_value_desc = dict(sorted(d.items(), key=lambda x: x[1], reverse=True)) # 按值降序

3. 元组与集合

元组(Tuple)不可变序列

1
2
3
4
5
t = (1, 2, 3)
t = 1, 2, 3 # 不加括号也是元组
len(t), t[0], t[1:3] # 长度、索引、切片
a, b, c = t # 解包
t.index(2), t.count(2) # 查找、计数

集合(Set)不重复元素

1
2
3
4
5
6
7
8
9
10
11
12
13
s = {1, 2, 3}
s = set([1, 2, 2, 3]) # 列表转集合,自动去重
s.add(4) # 添加元素
s.remove(2) # 删除元素(不存在则报错)
s.discard(99) # 安全删除(不存在不报错)
s.pop() # 随机删除一个元素

# 集合运算
s1 | s2 # 并集
s1 & s2 # 交集
s1 - s2 # 差集
s1 ^ s2 # 对称差集
s1 <= s2 # 子集判断

二、Pandas数据处理详解

1. 数据结构创建

Series创建

1
2
3
4
5
6
7
8
9
10
import pandas as pd

# 从列表创建
s = pd.Series([1, 3, 5, 7], index=['a', 'b', 'c', 'd'])

# 从字典创建
s = pd.Series({'a': 1, 'b': 3, 'c': 5})

# 从标量创建(重复值)
s = pd.Series(5, index=['a', 'b', 'c'])

DataFrame创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 从字典创建(最常用)
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'年龄': [20, 25, 30],
'成绩': [85, 90, 88]
})

# 从列表创建
df = pd.DataFrame(
[['张三', 20, 85], ['李四', 25, 90], ['王五', 30, 88]],
columns=['姓名', '年龄', '成绩']
)

# 从Series创建
df = pd.DataFrame({'列1': s1, '列2': s2})

2. 数据查看与基本信息

1
2
3
4
5
6
7
8
9
10
df.head()                    # 前5行
df.head(10) # 前10行
df.tail() # 后5行
df.shape # (行数, 列数)
df.info() # 数据类型信息
df.describe() # 数值列统计摘要
df.columns # 列名
df.index # 索引
df.dtypes # 每列数据类型
df.isnull().sum() # 每列缺失值数量

3. 数据读取与写入

1
2
3
4
5
6
7
8
9
# 读取
df = pd.read_csv('data.csv') # 读取CSV
df = pd.read_excel('data.xlsx') # 读取Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 指定工作表

# 写入
df.to_csv('output.csv', index=False) # 写入CSV(不保存索引)
df.to_excel('output.xlsx', index=False) # 写入Excel
df.to_excel('output.xlsx', sheet_name='结果') # 指定工作表名

4. 数据选择与过滤

列选择

1
2
df['姓名']                    # 单列(返回Series)
df[['姓名', '年龄']] # 多列(返回DataFrame)

行选择

1
2
3
4
5
6
7
df.iloc[0]                   # 按位置选择第0行
df.iloc[0:5] # 按位置选择0-4行
df.iloc[[0,2,4]] # 按位置选择多行

df.loc[0] # 按索引选择第0行
df.loc[0:5] # 按索引选择0-5行
df.loc[df['年龄'] > 25] # 按条件选择

条件过滤

1
2
3
4
5
6
7
8
9
10
# 单条件
df[df['成绩'] > 85]

# 多条件(注意括号)
df[(df['成绩'] > 85) & (df['年龄'] < 30)] # 且
df[(df['成绩'] > 85) | (df['年龄'] < 25)] # 或

# 模糊匹配
df[df['姓名'].str.contains('张')] # 包含"张"
df[df['姓名'].str.startswith('张')] # 以"张"开头

5. 数据清洗与处理

1
2
3
4
5
6
7
8
9
10
11
12
13
# 处理缺失值
df.dropna() # 删除包含NaN的行
df.fillna(0) # 填充NaN为0
df.fillna(method='ffill') # 向前填充
df.fillna(method='bfill') # 向后填充
df.fillna(df.mean()) # 用列均值填充

# 重复值处理
df.drop_duplicates() # 删除重复行
df.drop_duplicates(subset=['姓名']) # 基于指定列去重

# 类型转换
df['年龄'] = df['年龄'].astype(float) # 转换为浮点型

6. 数据排序与分组

1
2
3
4
5
6
7
8
9
10
11
12
13
# 排序
df.sort_values('成绩') # 按成绩升序
df.sort_values('成绩', ascending=False) # 按成绩降序
df.sort_values(['年龄', '成绩']) # 多列排序

# 分组统计
grouped = df.groupby('班级') # 按班级分组
grouped['成绩'].mean() # 每班平均成绩
grouped['成绩'].agg(['mean', 'max', 'min']) # 多统计指标
grouped.agg({'成绩':'mean', '年龄':'max'}) # 不同列不同统计

# 透视表
pd.pivot_table(df, values='成绩', index='班级', columns='性别', aggfunc='mean')

7. 数据合并与重塑

1
2
3
4
5
6
7
8
9
10
# 合并
pd.concat([df1, df2]) # 上下合并
pd.concat([df1, df2], axis=1) # 左右合并

# 连接(类似SQL JOIN)
pd.merge(df1, df2, on='学号') # 内连接
pd.merge(df1, df2, on='学号', how='left') # 左连接

# 数据重塑(宽表转长表)
df_melted = df.melt(id_vars=['姓名'], value_vars=['语文', '数学'])

三、Matplotlib可视化详解

1. 图形基本设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import matplotlib.pyplot as plt
import numpy as np

# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6)) # 10x6英寸

# 或使用传统方式
plt.figure(figsize=(10, 6))

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题

# 添加标题和标签
plt.title('图表标题', fontsize=16)
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')

# 设置坐标轴范围
plt.xlim(0, 10)
plt.ylim(0, 100)

# 设置刻度
plt.xticks([0, 2, 4, 6, 8, 10])
plt.xticks(rotation=45) # X轴标签旋转45度

# 添加网格
plt.grid(True, linestyle='--', alpha=0.5)

# 添加图例
plt.legend(['数据1', '数据2'], loc='upper left')

# 保存图形
plt.savefig('chart.png', dpi=300, bbox_inches='tight')

# 显示图形
plt.show()

2. 折线图(重点)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 准备数据
x = np.arange(0, 10, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制多条折线
plt.plot(x, y1, label='sin(x)', color='red', linestyle='-', linewidth=2, marker='o', markersize=4)
plt.plot(x, y2, label='cos(x)', color='blue', linestyle='--', linewidth=1, marker='s', markersize=4)

# 或使用简写格式
plt.plot(x, y1, 'r-o', label='sin(x)') # r:红色, -:实线, o:圆点标记
plt.plot(x, y2, 'b--s', label='cos(x)') # b:蓝色, --:虚线, s:方形标记

# 标记特殊点
plt.scatter(x[50], y1[50], color='green', s=100, zorder=5) # 散点标记
plt.annotate('峰值', xy=(x[50], y1[50]), xytext=(x[50]+1, y1[50]+0.2),
arrowprops=dict(arrowstyle='->')) # 添加标注

# 填充区域
plt.fill_between(x, y1, y2, where=(y1>y2), color='green', alpha=0.3)

3. 条形图(重点)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 准备数据
labels = ['A', 'B', 'C', 'D']
values = [25, 40, 30, 45]

# 垂直条形图
plt.bar(labels, values, color=['red', 'green', 'blue', 'orange'], alpha=0.7, width=0.5)

# 水平条形图
plt.barh(labels, values, color='skyblue', alpha=0.7, height=0.5)

# 分组条形图
x = np.arange(len(labels))
width = 0.35
plt.bar(x - width/2, values1, width, label='第一组')
plt.bar(x + width/2, values2, width, label='第二组')
plt.xticks(x, labels)

# 堆叠条形图
plt.bar(labels, values1, label='部分1')
plt.bar(labels, values2, bottom=values1, label='部分2')

# 在条形上添加数值
for i, v in enumerate(values):
plt.text(i, v + 1, str(v), ha='center')

4. 饼图(重点)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 准备数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['red', 'green', 'blue', 'orange']
explode = (0, 0.1, 0, 0) # 突出显示第二块

# 绘制饼图
plt.pie(sizes, labels=labels, colors=colors, explode=explode,
autopct='%1.1f%%', shadow=True, startangle=90)

# autopct格式选项
# %1.1f%% 表示1位整数和1位小数的百分比
# %d%% 表示整数百分比

# 使饼图为正圆形
plt.axis('equal')

# 添加标题
plt.title('饼图示例')

5. 子图绘制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 创建2x2的子图网格
fig, axes = plt.subplots(2, 2, figsize=(12, 8))

# 在第0行第0列绘制
axes[0, 0].plot(x, y1)
axes[0, 0].set_title('子图1')

# 在第0行第1列绘制
axes[0, 1].bar(labels, values)
axes[0, 1].set_title('子图2')

# 在第1行第0列绘制
axes[1, 0].scatter(x, y2)
axes[1, 0].set_title('子图3')

# 在第1行第1列绘制
axes[1, 1].pie(sizes, labels=labels)
axes[1, 1].set_title('子图4')

# 调整子图间距
plt.tight_layout()

6. 常用样式和颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 线型
'-' # 实线
'--' # 虚线
':' # 点线
'-.' # 点划线

# 颜色
'b' # 蓝色
'g' # 绿色
'r' # 红色
'c' # 青色
'm' # 品红
'y' # 黄色
'k' # 黑色
'w' # 白色

# 标记点
'.' # 点
',' # 像素
'o' # 圆
's' # 方形
'^' # 上三角
'v' # 下三角
'*' # 星形

7. 多Y轴图形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fig, ax1 = plt.subplots()

# 第一个Y轴
ax1.plot(x, y1, 'r-', label='数据1')
ax1.set_xlabel('X轴')
ax1.set_ylabel('Y1轴', color='red')
ax1.tick_params(axis='y', labelcolor='red')

# 第二个Y轴
ax2 = ax1.twinx()
ax2.plot(x, y2, 'b--', label='数据2')
ax2.set_ylabel('Y2轴', color='blue')
ax2.tick_params(axis='y', labelcolor='blue')

# 合并图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')

📌 考试重点提示

  1. 组合数据类型:重点掌握列表推导式、字典的遍历与排序、集合的去重操作
  2. Pandas:重点掌握数据筛选、分组统计、合并与透视表
  3. Matplotlib:重点掌握折线图、条形图、饼图的绘制与样式设置
  4. 代码规范:注意缩进、注释、变量命名规范
  5. 调试技巧:使用print()输出中间结果,使用type()检查数据类型


计算机概率课程复习(开卷资料)
https://www.mirstar.net/2026/01/15/python-preview/
作者
onlymatt
发布于
2026年1月15日
许可协议