Python 现代开发学习笔记

(一)把逐项计算交给数组

1. 先用列表完成同一项任务

三天早晚的阅读分钟数分别为 (10,20)、(30,40)、(50,60)。现在给每个数加 5,列表需要逐行取出、逐格计算;列表自己的加号表示连接,不能直接表达每格加 5。

进入配套的 analysis_project,按第一章的方法准备 Python 3.12 环境:

# 项目文件:analysis_project/pyproject.toml
# NumPy 处理数组,Matplotlib 输出图表;pandas 留作表格扩展。
[build-system]
requires = ["setuptools>=80,<83"]
build-backend = "setuptools.build_meta"

[project]
name = "numpy-reading-notes"
version = "0.1.0"
requires-python = ">=3.12,<3.13"
dependencies = ["numpy>=2.2,<3", "matplotlib>=3.9,<4"]

[project.optional-dependencies]
table = ["pandas>=2.2,<4"]

[project.scripts]
reading-analyze = "readingarray.cli:main"

[dependency-groups]
dev = ["pytest>=9.1,<10"]

[tool.setuptools.packages.find]
where = ["src"]

[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-ra --import-mode=importlib"
# 在 analysis_project 中建立环境,运行同一项计算的两种写法。
uv sync --locked
uv run python ../demos/list_array.py

pip 路线在 Python 3.12 的 .venv 中执行 python -m pip install -e . -r requirements-dev.txt,随后用这个环境的解释器运行各个示例。项目的 NumPy 负责数组计算,Matplotlib 负责图表;table 扩展在本章末尾介绍 pandas 时再安装。

# 项目文件:demos/list_array.py
# 同一份三天早晚阅读时长,先按列表逐格相加,再让数组按元素计算。
import numpy as np

records = [[10, 20], [30, 40], [50, 60]]
print("列表加号", records + [[1, 2]])
changed = [[value + 5 for value in day] for day in records]
minutes = np.array(records, dtype=np.int64)
print("循环结果", changed)
print("数组结果", (minutes + 5).tolist())
print("原数组", minutes.tolist())

import numpy as np 把模块名称简写为 np。np.array(records, dtype=np.int64) 从嵌套列表建立整数数组;minutes + 5 逐个元素计算并产生结果数组,minutes 保持原值。两份计算结果都是 [[15,25],[35,45],[55,65]]。

NumPy 的多维数组类型叫 ndarray。这里数组保存同一种数值类型,运算把整批数据交给已经实现好的数组循环。原来处理六格的工作仍然要做,写法与执行位置发生了变化,不能把一次数组表达式当作只进行一次数值计算。

列表逐行逐格相加,数组用同一形状安排批量计算,两者得到相同六个结果

笔记正文与全部题解 · Ctrl / ⌘ K