DALL·E 2024-03-10 00.46.29 - Visualize a simplified version of computer memory hardware in a 16_9 aspect ratio, focusing on the essential components with less complexity. The scen.webp

如果说计算机编程中,最重要的两个概念是什么,那么非数据结构和算法莫属。

前面我们练习编写了一个程序,打印出 100 以内的质数,可以理解这就是一个简单的算法。你可能已经领略到编程的魅力。

Pascal 语言之父 Niklaus Emil Wirth 写过一本书叫《算法 + 数据结构 = 程序》,本质上,编程是操作计算机进行计算,而算法和数据结构则赋予了计算机嵌入复杂世界的能力,就像我们理解世界的终极工具,数学一样。

接下来,我们将理解数据结构这一重要概念。

列表 list

Untitled

列表或者数组,可以理解顺序存储一批数据的结构,正如我们在 Excel 定义一列数据一样。上面图中,Amount 是列名称,你可以理解为变量名称,下面是数字是内容。

amount = [1.2, 3.4, 5.55, 9.9]

列表的常用操作:

amount.append(2) # 向列表尾部添加一个元素
amount.extend([1.1, 2.2]) # 合并两个列表
print(len(amount)) # 查看数组长度

可阅读官方文档了解更多:5. 数据结构 — Python 3.12.2 文档

扩展:可迭代类型 iterable

在阅读官方文档的时候可能你已经发现,列表的 extend函数入参类型并不是列表(List),而是 iterable。可以理解是这是一个大类,extend 不是只可以传入列表,任何可迭代的类型都可以传入。如果说列表概念对应苹果**,那么可迭代概念就对应水果

amount.extend("abc") # 列表添加 a、b、c 这三个字母
amount.extend(range(2)) # 列表添加 0、1、2
amount.extend({"apple": "", "banana": ""}) # 列表添加 apple banana

<aside> 🤖 请使用 AI,编写 Prompt,了解 Python 中的可迭代类型有哪些

</aside>

元组 tuple

元祖这个数据结构本质上就是个列表,但是之所以存在这种类型的数据结构,更多是编程语言的设计哲学。为了解决语法、安全等问题,减少 Bug 。

fruit = ("banana", "pear", "orange", "lemon", "apple") # 定义一个元组
"""
易错点:
需要注意的是,当只要一个元素的时候,最后需要有个逗号
因为括号是改变优先级的语法,如果没有逗号,就成了改变优先级了,虽然 `fruit = ("banana")` 没有意义。。和 `fruit = "banana"` 是等价的,语法歧义
"""
fruit = ("banana",)
# 当然也可以不加括号,但是逗号还是得保留
fruit = "banana",
# 多个的时候也可以不加括号,但是还是建议加上
fruit = "banana", "pear"