当前位置: 首页 > news >正文

《超简单:用 Python 让 Excel 飞起来》读书笔记:3.4.1 数组的基础知识:列表 vs NumPy 数组


🔥个人主页:杨利杰YJlio
❄️个人专栏:《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》
《微信助手》 《锤子助手》 《Python》 《Kali Linux》
《那些年未解决的Windows疑难杂症》
🌟让复杂的事情更简单,让重复的工作自动化


《超简单:用 Python 让 Excel 飞起来》读书笔记:3.4.1 数组的基础知识:列表 vs NumPy 数组

  • 1. 3.4.1 数组的基础知识:列表 vs NumPy 数组
  • 2. 为什么办公自动化要理解数组
  • 3. list 和 ndarray 的基本区别
  • 4. 最容易混淆的地方:list * 2 和 ndarray * 2
  • 5. NumPy 的核心优势:向量化运算
  • 6. 二维数组:把 Excel 表格放进 Python 的第一步
  • 7. 二维数组如何访问元素
  • 8. 从 list 到 ndarray,再到 Excel 自动化
  • 9. 常见问题和踩坑提醒
  • 10. 效果验证:如何确认自己真的理解了本节
  • 11. 总结提升

1. 3.4.1 数组的基础知识:列表 vs NumPy 数组

V4修正版进度标记:本篇为 06月13日 第1篇,承接 06月07日第2篇“2.7.2 自定义函数”之后继续更新。

这一篇是我阅读《超简单:用 Python 让 Excel 飞起来》时整理的读书笔记,对应书籍中的第3章 Python模块 / 3.4.1 数组的基础知识。这一节开始进入NumPy,也就是 Python 数据处理里非常核心的一块内容。

刚开始学 Python 办公自动化时,很多人会先接触list,也就是列表。列表很好用,能装数字、字符串、对象,也能配合循环做很多事情。但只要进入批量计算场景,比如一列工资统一乘以 1.1、一列金额统一扣除税率、一批分数统一归一化,普通列表就会显得不够直接。

这就是NumPy的价值。NumPy的核心对象是ndarray,也就是数组。它不是为了“装东西”而生,而是为了高效计算而生。

我的理解是:list更像一个灵活的容器,什么都能放;numpy.ndarray更像一块计算板,专门用来对一组数据做批量运算。

这张图展示的是 Python 列表和 NumPy 数组的整体区别。左侧强调list的灵活性,右侧强调ndarray的数值计算能力。

从图中可以看出,列表和数组不是谁完全替代谁,而是适用场景不同。列表适合保存各种类型的数据,数组更适合处理同类型、可批量计算的数据。写 Excel 自动化时,如果只是存一组名字,用列表就够;如果要对一整列数字做运算,NumPy 数组会更自然。

2. 为什么办公自动化要理解数组

Excel 的本质就是表格。表格里有行、有列、有单元格,也有一整列可以统一套公式的场景。比如工资表里每个人的工资统一上调 10%,商品单价统一打八折,分数统一转换成百分制,这些事情如果用 Excel 手动做,就是拖公式;如果用 Python 做,就需要批量计算。

普通list当然也能完成这些任务,但往往需要循环。循环不是不能用,而是代码会更啰嗦,也更容易在真实数据里写出边界问题。NumPy 的优势在于,它允许我们用更接近“批量公式”的方式写代码。

只保存数据

需要整列加减乘除

Excel 原始列数据

是否需要批量计算

list 列表即可

转成 NumPy ndarray

向量化运算

得到批量结果

写回 Excel 或继续分析

这个流程图可以把本节的价值说清楚:列表更适合保存数据,数组更适合计算数据。办公自动化里,真正高频的不是单个数字计算,而是一整列、一整块区域、一整张表的批量处理。

推荐理解方式:如果你的数据只是临时保存,先用list没问题;如果你要对整批数字做数学运算,就应该考虑numpy.ndarray

不要把 NumPy 当成“高级语法”去背。它真正解决的是批量计算问题,不是为了让代码看起来更复杂。

3. list 和 ndarray 的基本区别

list是 Python 内置的数据结构,特点是灵活。它可以同时放数字、字符串、布尔值,甚至还能放另一个列表。它的优势是通用,缺点是做数学批量运算时不够直接。

numpy.ndarray是 NumPy 提供的数组对象,特点是更适合数值计算。它通常存放同一类数据,比如一组整数、一组小数、一块二维表格。它的优势是支持向量化运算,也就是一行代码对整组数据执行计算。

先看最基础的创建方式:

# Python lista=[1,2,3,4,5]# NumPy ndarrayimportnumpyasnp b=np.array([1,2,3,4,5])

从表面看,ab都像是一组数字。但它们的类型完全不同。

importnumpyasnp a=[1,2,3]b=np.array([1,2,3])print(type(a))print(type(b))

输出结果类似这样:

<class 'list'> <class 'numpy.ndarray'>

这里要注意一点:np.array()不是简单换个名字,而是把 Python 列表转换成 NumPy 数组对象。对象变了,后面的运算行为也会跟着变。

这也是本节最重要的底层差异:同样看起来是一组数字,listndarray的运算规则是不一样的。

4. 最容易混淆的地方:list * 2 和 ndarray * 2

这一节真正让人“醒一下”的地方,就是* 2的差异。很多初学者会以为列表乘以 2,就是每个元素乘以 2。这个理解是错的。

先看普通列表:

a=[1,2,3]print(a*2)

输出结果是:

[1, 2, 3, 1, 2, 3]

这不是数学意义上的乘法,而是列表重复。也就是说,[1, 2, 3] * 2的意思是把这个列表复制两份拼在一起。

再看 NumPy 数组:

importnumpyasnp b=np.array([1,2,3])print(b*2)

输出结果是:

[2 4 6]

这才是逐元素计算,也就是每个元素都乘以 2。

这张图展示的是list * 2ndarray * 2的核心区别。上方的列表乘法是复制内容,下方的数组乘法才是逐元素计算。

从图中可以看出,同样是* 2,放在不同对象上,含义完全不同。普通列表执行的是重复操作,NumPy 数组执行的是数学运算。

这是新手非常容易踩的坑:不要看到* 2就默认它一定是数学乘法。先看对象类型,是list还是numpy.ndarray

推荐做法:如果目标是对一组数字做批量加减乘除,先确认数据已经转成np.array()

5. NumPy 的核心优势:向量化运算

NumPy 真正好用的地方,是它支持向量化运算。所谓向量化,不需要把这个词想得太玄,它可以先粗暴理解成:**不用自己写循环,也能对一整组数据批量计算。**

比如一组数字全部加 5:

importnumpyasnp b=np.array([10,20,30])print(b+5)

输出结果是:

[15 25 35]

一组数字全部除以 10:

importnumpyasnp b=np.array([10,20,30])print(b/10)

输出结果是:

[1. 2. 3.]

一组数字全部平方:

importnumpyasnp b=np.array([10,20,30])print(b**2)

输出结果是:

[100 400 900]

这类写法本质上就是 Python 里的“批量公式”。你写的是一行代码,实际处理的是一整组数据。

这张图展示的是 NumPy 在 Excel 自动化场景中的批量计算价值。比如工资调整、折扣计算、税率换算,本质上都可以理解成对一列数据统一执行某个公式。

从图中可以看出,NumPy 的优势不只是语法短,而是它让我们用更接近“整列公式”的方式处理数据。Excel 里拖动公式,Python 里用数组运算,两者解决的是同一类问题。

办公自动化里非常适合用 NumPy 的场景:工资调整、金额折扣、税率换算、分数归一化、批量单位换算、整列数据校正。

但也不要滥用。如果只是处理几个字符串、几个文件名、几个路径,用普通列表就够了,没必要为了用 NumPy 而用 NumPy。

6. 二维数组:把 Excel 表格放进 Python 的第一步

办公自动化里最常见的数据结构不是一维列表,而是二维表格。Excel 本身就是二维的:横向是列,纵向是行。每一行通常是一条记录,每一列通常是一个字段。

NumPy 的二维数组就可以用来表达这种结构。比如下面这个数组:

importnumpyasnp arr2d=np.array([[1,2,3],[4,5,6],])print(arr2d)

输出结果是:

[[1 2 3] [4 5 6]]

这就是一个 2 行 3 列的二维数组。它看起来已经很像一个没有表头的 Excel 区域。

这张图展示的是二维数组与shape的关系。二维数组像一张表,shape=(2,3)表示 2 行 3 列。

从图中可以看出,shape是理解二维数组的关键。它告诉我们这个数组有几行几列。很多数据处理报错,本质上都和维度不匹配有关,比如你以为是 3 列,实际传进去的是 2 列。

查看数组形状可以这样写:

print(arr2d.shape)

输出结果是:

(2, 3)

其中第一个数字是行数,第二个数字是列数。

一句话记忆:shape看的是数组形状,二维数组里通常就是“行数、列数”。

注意:NumPy 索引从 0 开始。第 0 行不是写错,而是 Python 的索引规则。

7. 二维数组如何访问元素

理解二维数组后,还要知道怎么访问里面的某个值。NumPy 的二维数组通常用arr[行, 列]的方式访问元素。

例如:

importnumpyasnp arr2d=np.array([[10,20,30],[40,50,60],])print(arr2d[0,1])print(arr2d[1,2])

输出结果是:

20 60

arr2d[0, 1]表示第 0 行第 1 列,也就是20arr2d[1, 2]表示第 1 行第 2 列,也就是60

推荐理解方式:先行后列,索引从 0 开始。这个规则记住后,二维数组的定位就不难。

如果把它和 Excel 类比,可以理解成“先找第几行,再找第几列”。只是 Excel 界面通常从第 1 行、第 A 列开始显示,而 Python 索引从 0 开始,这一点容易让新手错一位。

常见错误:把第 1 行误写成索引 1。实际上索引 1 是第二行。初学时建议多打印几次结果,不要靠感觉猜。

print("第0行第0列:",arr2d[0,0])print("第0行第1列:",arr2d[0,1])print("第1行第0列:",arr2d[1,0])

这种打印方式虽然笨,但非常适合初学阶段建立位置感。尤其是后面处理 Excel 区域、DataFrame、矩阵数据时,行列索引搞错会直接导致结果错位。

8. 从 list 到 ndarray,再到 Excel 自动化

学 NumPy 不应该只停在“会创建数组”。它真正的用法,是把原始数据转换成数组,进行批量计算,然后再把结果写回 Excel 或继续交给pandas分析。

例如有一列原始工资:

salary_list=[5000,6000,7000]

如果要统一上调 10%,可以先转成 NumPy 数组:

importnumpyasnp salary_list=[5000,6000,7000]salary_arr=np.array(salary_list)new_salary=salary_arr*1.1print(new_salary)

输出结果类似:

[5500. 6600. 7700.]

如果后面要写回 Excel,可以把结果继续交给pandasopenpyxl处理。这里先不用急着把所有库混在一起,先理解数据处理链路就够了。

这张图展示的是从listndarray,再到批量运算,最后写回 Excel 或继续分析的完整流程。

从图中可以看出,NumPy 更像是数据处理链路中的计算引擎。原始数据可以来自列表、Excel、CSV,也可以来自数据库;转成数组后,就可以进行批量计算;计算完成后,再把结果写回文件或继续分析。

这才是 NumPy 在办公自动化里的真实位置:它不是为了替代 Excel,而是为了让 Python 更高效地处理 Excel 里的批量数字计算。

9. 常见问题和踩坑提醒

第一个常见问题是:为什么列表乘以 2 不是每个元素乘以 2?因为list的乘法规则是重复列表,不是数学逐元素计算。如果你要对每个元素做数学运算,就应该用循环,或者先转换成 NumPy 数组。

a=[1,2,3]print(a*2)

输出结果是:

[1, 2, 3, 1, 2, 3]

第二个常见问题是:为什么 NumPy 数组里最好是同类型数据?因为 NumPy 的优势来自高效数值计算。如果一个数组里混入字符串、对象、空值,很多数学运算就会变得不稳定,甚至直接报错。

风险提醒:不要把 Excel 中混杂了文字、空白、异常字符的列直接当成纯数字数组计算。真实办公数据通常先要清洗,再计算。

第三个常见问题是:为什么二维数组报错说维度不匹配?这通常和shape有关。你以为数据是 2 行 3 列,但代码需要的是 3 行 2 列,或者某个操作要求两个数组形状一致。

importnumpyasnp arr=np.array([[1,2,3],[4,5,6],])print(arr.shape)

输出结果是:

(2, 3)

推荐做法:只要涉及二维数组、矩阵计算、批量写入表格,都先打印一次shape,确认行列是否和预期一致。

第四个常见问题是:学了 NumPy 后是不是就不用列表了?不是。列表仍然很重要。文件名列表、路径列表、员工姓名列表、Sheet 名称列表,这些场景用列表就很自然。NumPy 适合的是数值计算,不是所有数据都要转数组。

一句话判断:保存杂数据用list,批量算数字用ndarray

10. 效果验证:如何确认自己真的理解了本节

这一节不能只看“代码跑通了”。因为列表和数组的差异,很多时候不是语法问题,而是对象行为问题。你必须能解释同一段运算为什么在listndarray上结果不同。

我建议用下面这段小代码做验证:

importnumpyasnp a=[1,2,3]b=np.array([1,2,3])print("list * 2:",a*2)print("ndarray * 2:",b*2)print("list 类型:",type(a))print("ndarray 类型:",type(b))

如果你能清楚解释为什么输出结果不同,就说明第一层理解已经过关。

再用二维数组验证shape

importnumpyasnp arr2d=np.array([[10,20,30],[40,50,60],])print("数组内容:")print(arr2d)print("数组形状:",arr2d.shape)print("第0行第1列:",arr2d[0,1])print("第1行第2列:",arr2d[1,2])

这段代码至少要能验证三件事:第一,数组是 2 行 3 列;第二,索引从 0 开始;第三,访问元素时是先写行,再写列。

学习建议:不要只复制代码。每次运行后都要先看输出,再用自己的话解释输出为什么是这样。

如果解释不了输出结果,说明还只是“会跑代码”,不是“理解数组”。

11. 总结提升

这一节的核心,是理解 Python 列表和 NumPy 数组的差异。列表是通用容器,灵活但不专门为数学运算设计;NumPy 数组是数值计算工具,适合对一组数据做批量计算。

最关键的例子就是* 2。列表乘以 2 是复制列表,数组乘以 2 是每个元素乘以 2。这个差异看似小,但足以说明两者的设计目标完全不同。

二维数组则让我们开始把 Excel 表格映射到 Python 世界里。shape告诉我们数组的行列结构,arr[行, 列]帮我们定位具体元素。后面学习pandas、数据分析、批量写回 Excel 时,这些基础都会继续用到。

我的最终理解是:NumPy 不是为了让 Python 看起来更高级,而是为了让 Python 能像 Excel 公式一样,对整列、整块、整张表的数据进行批量计算。

后续写办公自动化脚本时,如果遇到整列数字统一计算、批量换算、矩阵式数据处理,就可以优先考虑 NumPy。

但也要记住:真实 Excel 数据往往不干净,做 NumPy 运算前,仍然要先检查空值、文本、异常字符和数据类型。

我最后把本节压缩成一句话:**列表负责装数据,数组负责算数据;理解这个差异,才算真正走进 Python 数据处理。**


返回顶部

http://www.gsyq.cn/news/1530841.html

相关文章:

  • 高效自动化抢票:大麦网智能购票脚本深度解析与实战指南
  • Windows 11升级终极方案:让旧电脑也能畅享最新系统的完整指南
  • Conopressin S ;CIIRNCPRG-NH₂
  • 面对难缠的 AI 公式乱码别发愁,AI 导出鸭凭借专属算法搞定公式导出排版故障
  • 冲压车间防暑制冷设备自产厂家盘点:2026车间降温选型实操指南​ - 厂房车间降温方案
  • 云南选土工膜怎么挑?云南土工膜厂家哪家防渗质量靠谱?
  • 用过才敢说!盘点2026年当红之选的AI论文写作软件
  • PXD10微控制器:工业HMI单芯片解决方案的架构解析与工程实践
  • 魔兽世界插件开发革命:一站式API文档与宏工具平台
  • Qt 5.9.9 + MSVC2015 64bit + qmake 超详细全流程手册
  • 模型剪枝与知识蒸馏:压缩大模型的两种路径与工程取舍
  • 避坑指南:选内衬不锈钢复合管厂家要避开这5个坑 - 信息热点
  • 天猫流量转化实战专家/机构测评榜单选型(2026中立客观版) - 品牌2026推荐
  • Ohook:解锁Microsoft 365完整功能的开源钩子技术方案
  • Grok 复制内容带井号(#)怎么办?试试 AI 导出鸭,快速剔除井号,修复复制导出异常问题
  • Linux 达梦数据库(DM8)超详细全流程手册(生产级 / 嵌入式 / GIS 开发专属)
  • 题解:洛谷 P3388 割点
  • VLE指令集:嵌入式开发中的代码密度优化与混合编码实践
  • 一体化污水处理设备技术解析与合规落地指南 - 奔跑123
  • USB-Disk-Ejector:Windows设备安全弹出终极解决方案,告别繁琐操作!
  • 旧衣回收小程序开发攻略
  • DataWorks新手避坑指南:ODPS SQL执行报错的8个常见原因与修复方法
  • 预算20万网站建设公司怎么选?2026年差异化建站服务商梯队排行,适配专项体验解析 - 资讯报道
  • I2C中断驱动编程实战:寄存器配置与状态机设计详解
  • 5分钟搞定全球地理数据:world.geo.json的终极快速入门指南
  • 2026 宁波江北除醛深度测评:多维度拆解优劣,本地优选品牌解读 - 泓动
  • 2026年十大优质变压器油生产厂家性价比排行榜 - 信息热点
  • HBM高带宽内存深度解析|吃透3D堆叠TSV核心原理、完胜DDR5带宽功耗瓶颈、附Python仿真代码、助力AI大模型训练推理高效落地
  • AVL树详解
  • 2026精选:福州代理记账十大排行榜本土企业 ——高性价之选 - 资讯速览