第二单元:数据结构

掌握Python核心数据结构

专为小白设计,从零开始学习数据结构

📚 单元介绍

欢迎来到Python数据结构单元!在本单元中,你将学习Python中常用的数据结构,这些是构建复杂程序的基础。

数据结构是存储和组织数据的方式,选择合适的数据结构可以提高程序的效率和可读性。本单元将详细介绍Python中最常用的数据结构,包括列表、元组、字典和集合。

🎯 学习目标

  • 掌握列表(List)的基本操作和使用场景
  • 了解元组(Tuple)的特点和使用方法
  • 学习字典(Dictionary)的键值对操作
  • 理解集合(Set)的特性和应用
  • 掌握字符串的常用操作
  • 能够根据实际需求选择合适的数据结构

📖 知识点讲解

1. 列表(List)

列表是Python中最常用的数据结构之一,它可以存储多个元素,并且可以修改。

# 创建列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
numbers = [1, 2, 3, 4, 5]
mixed = ["苹果", 1, True, 3.14]

# 访问列表元素
print(fruits[0])  # 苹果
print(fruits[-1])  # 葡萄

# 切片操作
print(fruits[1:3])  # ["香蕉", "橙子"]
print(fruits[:2])  # ["苹果", "香蕉"]
print(fruits[2:])  # ["橙子", "葡萄"]

# 修改列表
fruits[0] = "草莓"
print(fruits)  # ["草莓", "香蕉", "橙子", "葡萄"]

# 添加元素
fruits.append("梨")
print(fruits)  # ["草莓", "香蕉", "橙子", "葡萄", "梨"]

# 插入元素
fruits.insert(1, "桃子")
print(fruits)  # ["草莓", "桃子", "香蕉", "橙子", "葡萄", "梨"]

# 删除元素
fruits.remove("香蕉")
print(fruits)  # ["草莓", "桃子", "橙子", "葡萄", "梨"]

# 弹出元素
popped = fruits.pop()
print(popped)  # 梨
print(fruits)  # ["草莓", "桃子", "橙子", "葡萄"]

# 列表长度
print(len(fruits))  # 4

# 排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 6, 9]

# 反转
fruits.reverse()
print(fruits)  # ["葡萄", "橙子", "桃子", "草莓"]

2. 元组(Tuple)

元组与列表类似,但元组是不可修改的(immutable)。

# 创建元组
tuple1 = (1, 2, 3)
tuple2 = ("苹果", "香蕉", "橙子")
tuple3 = (1, "苹果", True)

# 访问元组元素
print(tuple2[0])  # 苹果
print(tuple2[-1])  # 橙子

# 切片操作
print(tuple2[1:3])  # ("香蕉", "橙子")

# 元组长度
print(len(tuple1))  # 3

# 注意:元组不可修改
# tuple1[0] = 4  # 这会报错

# 元组的优点:占用内存少,访问速度快,可作为字典的键

# 单元素元组需要加逗号
single_tuple = (42,)
print(type(single_tuple))  # <class 'tuple'>

# 元组解包
x, y, z = tuple1
print(x, y, z)  # 1 2 3

3. 字典(Dictionary)

字典是一种键值对(key-value)数据结构,通过键来访问值。

# 创建字典
student = {
    "name": "小明",
    "age": 18,
    "grade": "高三",
    "scores": {"语文": 90, "数学": 85, "英语": 95}
}

# 访问字典值
print(student["name"])  # 小明
print(student.get("age"))  # 18

# 使用get方法访问不存在的键
print(student.get("gender", "未知"))  # 未知

# 修改字典
student["age"] = 19
print(student["age"])  # 19

# 添加新键值对
student["gender"] = "男"
print(student["gender"])  # 男

# 删除键值对
removed = student.pop("grade")
print(removed)  # 高三
print(student)  # {'name': '小明', 'age': 19, 'scores': {'语文': 90, '数学': 85, '英语': 95}, 'gender': '男'}

# 获取所有键
print(student.keys())  # dict_keys(['name', 'age', 'scores', 'gender'])

# 获取所有值
print(student.values())  # dict_values(['小明', 19, {'语文': 90, '数学': 85, '英语': 95}, '男'])

# 获取所有键值对
print(student.items())  # dict_items([('name', '小明'), ('age', 19), ('scores', {'语文': 90, '数学': 85, '英语': 95}), ('gender', '男')])

# 遍历字典
for key, value in student.items():
    print(f"{key}: {value}")

4. 集合(Set)

集合是一种无序的、不包含重复元素的数据结构。

# 创建集合
set1 = {1, 2, 3, 4, 5}
set2 = {"苹果", "香蕉", "橙子"}

# 从列表创建集合
set3 = set([1, 2, 2, 3, 3, 3])
print(set3)  # {1, 2, 3}  # 自动去重

# 添加元素
set1.add(6)
print(set1)  # {1, 2, 3, 4, 5, 6}

# 删除元素
set1.remove(3)
print(set1)  # {1, 2, 4, 5, 6}

# 集合运算
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}

# 并集
print(set_a | set_b)  # {1, 2, 3, 4, 5, 6}

# 交集
print(set_a & set_b)  # {3, 4}

# 差集
print(set_a - set_b)  # {1, 2}
print(set_b - set_a)  # {5, 6}

# 对称差集
print(set_a ^ set_b)  # {1, 2, 5, 6}

# 集合长度
print(len(set1))  # 5

# 检查元素是否在集合中
print(2 in set1)  # True
print(3 in set1)  # False

5. 字符串操作

字符串是Python中常用的数据类型,有许多内置方法。

# 创建字符串
s = "Hello, Python!"

# 访问字符
print(s[0])  # H
print(s[-1])  # !

# 切片
print(s[0:5])  # Hello
print(s[7:])  # Python!

# 字符串长度
print(len(s))  # 13

# 字符串方法
print(s.upper())  # HELLO, PYTHON!
print(s.lower())  # hello, python!
print(s.title())  # Hello, Python!

# 查找子字符串
print(s.find("Python"))  # 7
print(s.find("Java"))  # -1

# 替换
print(s.replace("Python", "World"))  # Hello, World!

# 分割
print(s.split(", "))  # ["Hello", "Python!"]

# 去除空白
ss = "  Hello, Python!  "
print(ss.strip())  # Hello, Python!

# 检查字符串开头和结尾
print(s.startswith("Hello"))  # True
print(s.endswith("!"))  # True

# 格式化字符串
name = "小明"
age = 18
print(f"我的名字是{name},今年{age}岁")
print("我的名字是{},今年{}岁".format(name, age))
print("我的名字是%s,今年%d岁" % (name, age))

💻 实践练习

练习1:列表操作

编写一个程序,创建一个包含10个随机整数的列表,然后:

  • 打印列表
  • 计算列表的和
  • 找出列表中的最大值和最小值
  • 对列表进行排序
  • 反转列表

练习2:字典操作

编写一个程序,创建一个学生信息字典,包含姓名、年龄、成绩等信息,然后:

  • 打印学生的所有信息
  • 修改学生的年龄
  • 添加学生的性别信息
  • 删除学生的成绩信息
  • 遍历字典并打印所有键值对

练习3:集合操作

编写一个程序,创建两个集合,然后:

  • 计算并打印两个集合的并集
  • 计算并打印两个集合的交集
  • 计算并打印两个集合的差集
  • 检查一个集合是否是另一个集合的子集

练习4:字符串操作

编写一个程序,输入一个字符串,然后:

  • 将字符串转换为大写
  • 将字符串转换为小写
  • 计算字符串的长度
  • 检查字符串是否以特定字符开头
  • 替换字符串中的某个子串

📦 学习资源

📖

推荐书籍

《Python编程:从入门到实践》

《Python基础教程》

🌐

在线资源

Python官方文档 - 数据结构

菜鸟教程 - Python数据结构

💻

开发工具

Anaconda

Jupyter Notebook