2d List

(date: 2025-11-01)

难度: 2

时长: 30 min

List of Lists (混合结构)

如何创建这个 List ?

可以做到,但并不推荐!

列表如何嵌套和解套

image

放大

视角从外层往内层 (从高层往低层),对应括号从左往右。

x = [[1,2,3], 4]

练习

  1. 修改值为3的元素,其新值改为6;

  2. 把值为4的元素的值改为 (4,5,6);

  3. 现在值为5的元素是否能被修改成 10 ?

2d List (List of Lists)

lst = [[1,2,3], [4,5,6], [7,8,9]]

练习

  1. 将第1行中的第2个元素修改为 10;

  2. 将第2行中的第1个元素 *10;

  3. 将第3行中的第3个元素 +10;

  4. 将所有成员都乘以 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)