5步入门Python数据结构

 

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() – 返回键的值,避免KeyError
  • pop() – 移除键并返回值
  • 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数据结构文档以获取更多见解。

祝编码愉快!

更多