Python中数组的实现 Python
在 Python 中,数组通常有两种理解:
· 内置的列表(list):最常用的“动态数组”,可以存放任意类型元素。
· array 模块:提供类型化的紧凑数组(如 array('i') 存放有符号整数)。
· NumPy 库:科学计算中的多维数组(numpy.ndarray),功能强大。
下面以最常用的 列表(list) 为主介绍,最后补充 NumPy 的二维数组示例。
---
一、一维数组(列表)
1. 定义
# 空数组
arr1 = []
# 整数数组
arr2 = [1, 2, 3, 4, 5]
# 不同类型混合(一般不推荐)
arr3 = [1, "hello", 3.14]
2. 遍历
# 方法1:直接遍历元素
for x in arr2:
print(x)
# 方法2:遍历索引
for i in range(len(arr2)):
print(arr2[i])
# 方法3:同时获取索引和值
for i, val in enumerate(arr2):
print(f"索引{i}: {val}")
---
二、二维数组(二维列表)
二维数组可以看作“数组的数组”,即列表中的每个元素又是一个列表。
1. 定义
# 3行4列的二维数组(所有元素初始为0)
rows, cols = 3, 4
matrix = [[0] * cols for _ in range(rows)]
# 结果:[[0,0,0,0], [0,0,0,0], [0,0,0,0]]
# 手动定义
matrix2 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
⚠️ 注意:不要用 [[0]*cols]*rows 创建二维数组,因为这样每一行都是同一个列表的引用,修改一行会影响所有行。
2. 遍历
# 双重循环(按行,再按列)
for row in matrix2:
for elem in row:
print(elem, end=" ")
print() # 换行
# 使用索引遍历
for i in range(len(matrix2)):
for j in range(len(matrix2[i])):
print(f"matrix2[{i}][{j}] = {matrix2[i][j]}")
3. 示例:矩阵加法
A = [
[1, 2, 3],
[4, 5, 6]
]
B = [
[7, 8, 9],
[10, 11, 12]
]
# 矩阵加法(对应元素相加)
result = [
[A[i][j] + B[i][j] for j in range(len(A[0]))]
for i in range(len(A))
]
print(result) # [[8, 10, 12], [14, 16, 18]]
---
三、使用 array 模块(类型化数组)
适合存储大量相同数值类型且需要节省内存的场景。
from array import array
# 定义一维数组(类型码 'i' 表示有符号整数)
arr = array('i', [1, 2, 3, 4, 5])
# 遍历
for x in arr:
print(x)
# 二维数组:array 本身不支持多维,可以用列表嵌套 array
matrix = [array('i', [1,2,3]), array('i', [4,5,6])]
---
四、使用 NumPy(推荐用于科学计算)
NumPy 提供真正的多维数组对象 ndarray,支持向量化操作,性能极高。
安装(如未安装)
pip install numpy
示例
import numpy as np
# 定义二维数组
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# 遍历(通常不直接循环,而是用向量化运算,但这里演示遍历)
for row in matrix:
for elem in row:
print(elem, end=" ")
print()
# 更 NumPy 风格的遍历(使用 nditer)
for elem in np.nditer(matrix):
print(elem, end=" ")
print()
# 矩阵加法(直接使用 +)
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
C = A + B
print(C) # [[ 6 8], [10 12]]
---
总结
方式 优点 适用场景
列表(list) 灵活、内置、简单 一般编程、存储混合类型
array 模块 内存紧凑、类型固定 大量同类型数值,不需要高级运算
NumPy 数组 多维、快速向量化运算 科学计算、数据分析、机器学习
对于初学者,先用 列表嵌套列表 实现二维数组即可,熟练后可引入 NumPy 提升效率。
评论 (0)
登录后可以发表评论
立即登录还没有评论,快来发表第一条评论吧!