Python数据结构简介
当开始学习编程时,无论你使用哪种编程语言,你会发现你的新学科中的大部分内容可以归类为几个主要主题。按照一般的理解顺序,它们是:语法(语言的词汇);命令(将词汇组合成有用的方式);流程控制(我们如何指导命令执行的顺序);算法(我们解决特定问题的步骤……这个词怎么会变得如此令人困惑?);最后是数据结构(我们在算法执行期间用于数据操作的虚拟存储仓库(同样是……一系列的步骤))。
基本上,如果你想实现一个问题的解决方案,通过将一系列命令拼凑成算法的步骤,某些时候需要对数据进行处理,而数据结构将变得至关重要。这些数据结构提供了一种高效组织和存储数据的方法,对于创建快速、模块化且可扩展的代码至关重要。Python作为一种特定的编程语言,拥有一系列内置的数据结构。
本教程将重点介绍这四种基础的Python数据结构:
- 列表 – 有序的、可变的,允许重复元素。适用于存储数据序列。
- 元组 – 有序的、不可变,允许重复元素。可视为不可变的列表。
- 字典 – 无序的、可变的,通过键值对映射。适用于以键值格式存储数据。
- 集合 – 无序的、可变的,包含唯一元素。适用于成员测试和消除重复项。
除了基础数据结构,Python还提供了更高级的结构,如堆、队列和链表,这些结构可以进一步增强你的编码能力。这些高级结构基于基础结构构建,能够实现更复杂的数据处理,通常用于特定场景。但你并不限于此;你可以使用所有现有结构作为基础来实现自己的结构。然而,对列表、元组、字典和集合的理解仍然是首要的,因为它们是更高级数据结构的构建基石。
本指南旨在提供对这些核心结构的清晰而简明的理解。当你开始你的Python之旅时,接下来的章节将指导你通过基本概念和实际应用。从创建和操作列表到利用集合的独特功能,本教程将为你提供在编码中脱颖而出的技能。
步骤1:在Python中使用列表
什么是Python中的列表?
Python中的列表是一种有序的、可变的数据类型,可以存储各种对象,允许重复元素。列表由方括号[ ]
定义,元素之间用逗号分隔。
例如:
fibs = [0, 1, 1, 2, 3, 5, 8, 13, 21]
列表在组织和存储数据序列方面非常有用。
创建一个列表
列表可以包含不同的数据类型,如字符串、整数、布尔值等。例如:
mixed_list = [42, "Hello World!", False, 3.14159]
操作列表
列表中的元素可以被访问、添加、更改和移除。例如:
# 访问第二个元素(索引从'0'开始)
print(mixed_list[1])
# 追加元素
mixed_list.append("This is new")
# 更改元素
mixed_list[0] = 5
# 移除最后一个元素
mixed_list.pop(0)
有用的列表方法
一些方便的内置方法包括:
sort()
– 就地排序列表append()
– 将元素添加到列表末尾insert()
– 在指定索引处插入元素pop()
– 移除指定索引处的元素remove()
– 移除第一次出现的指定值reverse()
– 就地反转列表
列表的实操示例
# 创建购物车作为列表
cart = ["apples", "oranges", "grapes"]
# 排序列表
cart.sort()
# 添加新商品
cart.append("blueberries")
# 移除第一个商品
cart.pop(0)
print(cart)
输出:
['grapes', 'oranges', 'blueberries']
步骤2:理解Python中的元组
什么是元组?
元组是Python中另一种序列数据类型,类似于列表。然而,与列表不同的是,元组是不可变的,意味着一旦创建,其元素不能被改变。它们由圆括号( )
定义。
# 定义一个元组
my_tuple = (1, 2, 3, 4)
何时使用元组
元组通常用于不应修改的项目集合。元组比列表更快,适合只读操作。一些常见的用例包括:
- 存储常量或配置数据
- 函数返回多个组件的值
- 字典键,因为它们是可哈希的
访问元组元素
访问元组中的元素与访问列表元素的方式类似。索引和切片的工作方式相同。
# 访问元素
first_element = my_tuple[0]
sliced_tuple = my_tuple[1:3]
对元组的操作
由于元组是不可变的,许多列表操作如append()
或remove()
不适用。然而,你仍然可以执行一些操作:
- 连接:使用
+
运算符组合元组。
concatenated_tuple = my_tuple + (5, 6)
- 重复:使用
*
运算符重复一个元组。
repeated_tuple = my_tuple * 2
- 成员关系:使用
in
关键字检查元素是否存在于元组中。
exists = 1 in my_tuple
元组方法
由于元组的不可变特性,与列表相比,元组内置方法较少。一些有用的方法包括:
count()
:计算特定元素的出现次数。
count_of_ones = my_tuple.count(1)
index()
:查找值第一次出现的索引。
index_of_first_one = my_tuple.index(1)
元组打包和解包
元组打包和解包是Python中的便捷功能:
- 打包:将多个值赋给单个元组。
packed_tuple = 1, 2, 3
- 解包:将元组元素赋给多个变量。
a, b, c = packed_tuple
不可变但不绝对
虽然元组本身是不可变的,但它们可以包含可变元素,如列表。
# 包含可变列表的元组
complex_tuple = (1, 2, [3, 4])
注意,虽然你不能改变元组本身,但你可以修改其中的可变元素。
步骤3:掌握Python中的字典
什么是Python中的字典?
Python中的字典是一种无序的、可变的数据类型,存储唯一键到值的映射。字典用花括号{ }
表示,由键值对组成,键和值之间用逗号分隔。
例如:
student = {"name": "Michael", "age": 22, "city": "Chicago"}
字典用于以结构化方式存储数据,并通过键访问值。
创建字典
字典键必须是不可变对象,如字符串、数字或元组。字典值可以是任何对象。
student = {"name": "Susan", "age": 23}
prices = {"milk": 4.99, "bread": 2.89}
操作字典
元素可以通过键进行访问、添加、更改和移除。
# 通过键访问值
print(student["name"])
# 添加新键值
student["major"] = "computer science"
# 更改值
student["age"] = 25
# 移除键值
del student["city"]
有用的字典方法
一些有用的内置方法包括:
keys()
– 返回键列表values()
– 返回值列表items()
– 返回(键,值)元组get()
– 返回键的值,避免KeyErrorpop()
– 移除键并返回值update()
– 添加多个键值
字典的实操示例
scores = {"Francis": 95, "John": 88, "Daniel": 82}
# 添加新成绩
scores["Zoey"] = 97
# 移除John的成绩
scores.pop("John")
# 获取Daniel的成绩
print(scores.get("Daniel"))
# 打印所有学生姓名
print(scores.keys())
步骤4:探索Python中的集合
什么是Python中的集合?
Python中的集合是一种无序的、可变的集合,其中包含唯一的、不可变的对象。集合用花括号{ }
表示,但不像字典,没有键值对。
例如:
numbers = {1, 2, 3, 4}
集合用于成员测试、消除重复项和数学运算。
创建集合
可以通过将列表传递给set()
构造函数来创建集合:
my_list = [1, 2, 3, 3, 4]
my_set = set(my_list) # {1, 2, 3, 4}
集合可以包含混合的数据类型,如字符串、布尔值等。
操作集合
集合中的元素可以被添加和移除。
numbers.add(5)
numbers.remove(1)
有用的集合运算
一些有用的集合运算包括:
union()
– 返回两个集合的并集intersection()
– 返回集合的交集difference()
– 返回集合之间的差集symmetric_difference()
– 返回对称差集
集合的实操示例
A = {1, 2, 3, 4}
B = {2, 3, 5, 6}
# 并集 - 合并集合
print(A | B)
# 交集
print(A & B)
# 差集
print(A - B)
# 对称差集
print(A ^ B)
步骤5:比较列表、字典和集合
特征对比
以下是本教程中提到的四种Python数据结构的简要比较。
结构 | 有序 | 可变 | 重复元素 | 使用场景 |
---|---|---|---|---|
列表 | 是 | 是 | 是 | 存储序列 |
元组 | 是 | 否 | 是 | 存储不可变序列 |
字典 | 否 | 是 | 键:否 值:是 |
存储键值对 |
集合 | 否 | 是 | 否 | 消除重复,成员测试 |
何时使用每种数据结构
将此作为在特定情况下首先选择哪种结构的软性指导。
- 使用列表处理有序的、基于序列的数据。适用于堆栈/队列。
- 使用元组处理有序的、不可变的序列。当需要固定的元素集合且不应更改时很有用。
- 使用字典处理键值数据。适用于存储相关属性。
- 使用集合存储唯一元素和数学运算。
使用所有四种数据结构的实操示例
让我们看看这些结构如何在一个稍微复杂的例子中一起工作。
# 制作人员姓名列表
names = ["John", "Mary", "Bob", "Mary", "Sarah"]
# 制作附加信息的元组(例如,电子邮件)
additional_info = ("john@example.com", "mary@example.com", "bob@example.com", "mary@example.com", "sarah@example.com")
# 制作集合以去重
unique_names = set(names)
# 制作姓名-年龄对的字典
persons = {}
for name in unique_names:
persons[name] = random.randint(20,40)
print(persons)
输出:
{'John': 34, 'Bob': 29, 'Sarah': 25, 'Mary': 21}
此示例使用列表来进行有序序列,使用元组来存储附加的不可变信息,使用集合来去除重复项,并使用字典来存储键值对。
迈向未来
在这篇全面的教程中,我们深入探讨了Python中的基础数据结构,包括列表、元组、字典和集合。这些结构构成了Python编程的基石,提供了数据存储、处理和操作的框架。理解这些结构对于编写高效且可扩展的代码至关重要。从操作列表中的序列,到使用字典中的键值对组织数据,再到使用集合确保唯一性,这些基本工具在数据处理方面提供了极大的灵活性。
正如我们通过代码示例所看到的,这些数据结构可以组合在一起解决复杂的问题。通过利用这些数据结构,你可以开启数据分析、机器学习等领域的广泛可能性。不要犹豫,探索官方的Python数据结构文档以获取更多见解。
祝编码愉快!