跳转至

核心数据结构

Python 提供了四个内置的高级数据结构:列表 (List)元组 (Tuple)字典 (Dictionary)集合 (Set)。掌握它们是 Python 编程的关键。

1. 列表 (List)

列表是有序、可变、允许重复元素的集合。

创建与访问

# 创建列表
fruits = ["apple", "banana", "cherry"]
mixed = [1, "hello", 3.14, True]   # 可以包含不同类型

# 访问元素 (索引从 0 开始)
print(fruits[0])    # "apple"
print(fruits[-1])   # "cherry" (最后一个元素)

修改与操作 (CRUD)

# 修改
fruits[1] = "blueberry"

# 添加
fruits.append("date")           # 在末尾添加
fruits.insert(1, "apricot")     # 在指定位置插入

# 删除
fruits.remove("apple")          # 删除指定值
popped = fruits.pop()           # 删除并返回最后一个元素
del fruits[0]                   # 删除指定索引

# 查找
if "banana" in fruits:
    print("Found!")

列表切片 (Slicing)

语法:list[start:end:step] (左闭右开 [start, end))

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(nums[2:5])    # [2, 3, 4]
print(nums[:3])     # [0, 1, 2] (从头开始)
print(nums[7:])     # [7, 8, 9] (直到结尾)
print(nums[::-1])   # [9, 8, ..., 0] (反转列表)
print(nums[::2])    # [0, 2, 4, 6, 8] (步长为2)

常用方法

方法 描述
.append(x) 末尾追加
.extend(iterable) 扩展列表
.sort() 原地排序
.reverse() 原地反转
len(list) 获取长度

2. 元组 (Tuple)

元组是有序、不可变 (Immutable) 的集合。

特点与用途

  • 不可变: 一旦创建,不能修改、添加或删除元素。
  • 速度快: 比列表轻量,访问速度略快。
  • 安全: 保护数据不被意外修改。
  • 用途: 函数返回多值、字典的键。
# 创建元组
point = (10, 20)
single_item = (1,)  # 注意:单个元素需要加逗号

# 访问 (同列表)
x = point[0]

# 解包 (Unpacking)
x, y = point
print(f"x={x}, y={y}")

不可变性

尝试修改元组会报错:TypeError: 'tuple' object does not support item assignment

3. 字典 (Dictionary)

字典是无序的、键值对 (Key-Value) 的集合。键必须是唯一的且不可变 (通常是字符串或数字)。

创建与访问

# 创建字典
person = {
    "name": "Alice",
    "age": 25,
    "city": "New York"
}

# 访问值
print(person["name"])       # "Alice"

# 使用 .get() 安全访问 (推荐)
print(person.get("email"))          # None (键不存在时不报错)
print(person.get("email", "N/A"))   # "N/A" (指定默认值)

修改操作

# 添加/修改
person["email"] = "alice@example.com"  # 新增
person["age"] = 26                     # 修改

# 删除
del person["city"]
age = person.pop("age")

遍历字典

# 遍历键
for key in person:
    print(key)

# 遍历值
for value in person.values():
    print(value)

# 遍历键值对
for key, value in person.items():
    print(f"{key}: {value}")

4. 集合 (Set)

集合是无序、不重复元素的集合。主要用于去重和数学运算。

# 创建集合
colors = {"red", "green", "blue", "red"}
print(colors)  # {'red', 'green', 'blue'} (自动去重)

empty_set = set() # 注意:{} 创建的是空字典,不是空集合

集合运算

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

# 交集
print(a & b)  # {3, 4}

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

# 差集 (a 有 b 没有)
print(a - b)  # {1, 2}

# 对称差集 (不同时存在的)
print(a ^ b)  # {1, 2, 5, 6}

数据结构对比总结

特性 列表 (List) 元组 (Tuple) 字典 (Dict) 集合 (Set)
定义符号 [] () {key: val} {}
有序性 有序 有序 3.7+ 有序 无序
可变性 可变 不可变 可变 可变
重复元素 允许 允许 键不可重复 不可重复
访问方式 索引 索引 键 (Key) 无 (仅遍历/检查)

可变 vs 不可变 (Important)

  • 不可变: int, float, str, tuple, bool
  • 可变: list, dict, set
# 列表引用的坑
a = [1, 2]
b = a        # b 引用了 a 的对象
b.append(3)

print(a)     # [1, 2, 3] (a 也变了!)

# 解决方案:复制列表
c = a[:]     # 浅拷贝
# 或 import copy; d = copy.deepcopy(a) # 深拷贝

本章小结

  • 列表是主力工具,灵活多变。
  • 元组用于这种"配置型"不可变数据。
  • 字典用于查找和结构化数据 (JSON)。
  • 集合用于去重和集合运算。

练习题

  1. 列表去重:给定列表 [1, 2, 2, 3, 4, 4, 5],使用最简短的代码将其去重并转换回列表。
  2. 字典统计:给定字符串 "hello world", 统计每个字符出现的次数,存入字典 (如 {'h': 1, 'e': 1, ...})。
  3. 数据管理:创建一个列表,里面包含三个字典,每个字典代表一个学生(包含 name, score)。编写代码找出分数最高的学生姓名。

下一章:运算符与表达式