2d List¶
(date: 2025-11-01)
难度: 2
时长: 30 min
List of Lists (混合结构)¶
如何创建这个 List ?

可以做到,但并不推荐!
列表如何嵌套和解套¶

视角从外层往内层 (从高层往低层),对应括号从左往右。
x = [[1,2,3], 4]
练习¶
修改值为3的元素,其新值改为6;
把值为4的元素的值改为 (4,5,6);
现在值为5的元素是否能被修改成 10 ?
2d List (List of Lists)¶

lst = [[1,2,3], [4,5,6], [7,8,9]]
练习¶
将第1行中的第2个元素修改为 10;
将第2行中的第1个元素 *10;
将第3行中的第3个元素 +10;
将所有成员都乘以 2
Numpy 2d Array¶
NumPy 是 Python 中用于科学计算的核心库,提供了高性能的多维数组对象。与 Python 的 2D List 相比,NumPy 数组在性能和功能上都有显著优势。
创建 NumPy 2D 数组¶
import numpy as np
# 从列表创建 2D 数组
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr = np.array(lst)
print(arr)
# 输出:
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
基本操作示例¶
# 创建相同的 3x3 数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 访问元素
print(arr[0, 1]) # 输出: 2 (第1行第2列)
print(arr[1, 0]) # 输出: 4 (第2行第1列)
print(arr[2, 2]) # 输出: 9 (第3行第3列)
# 修改元素
arr[0, 1] = 10 # 将第1行第2列改为10
arr[1, 0] *= 10 # 将第2行第1列乘以10
arr[2, 2] += 10 # 将第3行第3列加10
print(arr)
# 输出:
# [[ 1 10 3]
# [40 5 6]
# [ 7 8 19]]
数组运算¶
# 创建相同的 3x3 数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 数学运算
print(arr + 10) # 每个元素加10
print(arr * 2) # 每个元素乘以2
print(arr ** 2) # 每个元素平方
# 矩阵运算
print(arr.T) # 转置矩阵
print(np.sum(arr)) # 所有元素求和
print(np.mean(arr)) # 所有元素平均值
2d List vs 2d Array¶
主要区别¶
特性 |
2D List |
NumPy 2D Array |
|---|---|---|
性能 |
较慢,适合小规模数据 |
快速,适合大规模数值计算 |
内存使用 |
较高,每个元素都是对象 |
较低,元素是原生数据类型 |
数据类型 |
可以混合类型 |
通常要求统一数据类型 |
运算支持 |
需要循环遍历 |
支持向量化运算 |
功能丰富度 |
基本操作 |
丰富的数学和科学计算函数 |
性能对比示例¶
import numpy as np
import time
# 使用相同的 3x3 数据
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 2D List 运算
start = time.time()
result_list = []
for row in data:
new_row = [x * 2 for x in row]
result_list.append(new_row)
list_time = time.time() - start
# NumPy 数组运算
arr = np.array(data)
start = time.time()
result_arr = arr * 2
numpy_time = time.time() - start
print(f"2D List 耗时: {list_time:.6f}秒")
print(f"NumPy 数组耗时: {numpy_time:.6f}秒")
适用场景¶
使用 2D List 的情况:
数据量较小
需要混合数据类型
简单的数据结构操作
不需要复杂的数学运算
使用 NumPy 2D Array 的情况:
大规模数值计算
科学计算和数据分析
需要高性能的矩阵运算
机器学习算法实现
转换示例¶
# 2D List 转 NumPy 数组
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr = np.array(lst)
# NumPy 数组转 2D List
arr_back = arr.tolist()
print("原始列表:", lst)
print("NumPy 数组:", arr)
print("转换回列表:", arr_back)