文章目录
- 1. 列表(List)
- 2. 元组(Tuple)
- 3. 字典(Dictionary)
- 4. 集合(Set)
- 5. 数组(Array)
- 6. 栈(Stack)
- 7. 队列(Queue)
- 8. 链表(Linked List)
- 9. 树(Tree)
- 10. 图(Graph)
下面是对Python中常见数据结构的详细介绍,包括它们的特性、优缺点和使用场景,并提供示例代码。
1. 列表(List)
特性:
- 有序集合,可以包含重复元素。
- 支持索引、切片和各种操作。
优缺点:
- 优点:动态大小,易于操作。
- 缺点:查找时间复杂度为O(n),插入和删除时可能需要移动元素。
使用场景:
- 存储有序的元素,适合需要频繁修改或访问的场景。
示例:
python"># 创建列表
my_list = [1, 2, 3, 4, 5]# 添加元素
my_list.append(6)# 删除元素
my_list.remove(3)# 访问元素
print(my_list[0]) # 输出 1# 切片
print(my_list[1:4]) # 输出 [2, 4, 5]
2. 元组(Tuple)
特性:
- 有序集合,元素不可更改(不可变)。
- 可以包含重复元素。
优缺点:
- 优点:占用内存小,支持哈希,可以用作字典的键。
- 缺点:一旦创建,不能更改其内容。
使用场景:
- 当需要一个固定集合的元素,可以使用元组。例如,返回多个值时。
示例:
python"># 创建元组
my_tuple = (1, 2, 3)# 访问元素
print(my_tuple[1]) # 输出 2# 元组的不可变性
# my_tuple[1] = 4 # 会报错
3. 字典(Dictionary)
特性:
- 无序的键值对集合,键(key)必须是不可变类型。
- 支持快速查找。
优缺点:
- 优点:快速查找,灵活的结构。
- 缺点:内存占用相对较高。
使用场景:
- 存储相关联的数据,比如用户信息(用户名和用户ID)。
示例:
python"># 创建字典
my_dict = {'name': 'Alice', 'age': 30}# 添加条目
my_dict['city'] = 'New York'# 访问元素
print(my_dict['name']) # 输出 Alice# 删除条目
del my_dict['age']
4. 集合(Set)
特性:
- 无序的唯一元素集合,不能包含重复元素。
优缺点:
- 优点:快速查找、插入和删除。
- 缺点:内部实现需要更多内存。
使用场景:
- 去重、集合运算(交集、并集等)。
示例:
python"># 创建集合
my_set = {1, 2, 3, 4}# 添加元素
my_set.add(5)# 删除元素
my_set.remove(2)# 集合运算
other_set = {3, 4, 5, 6}
print(my_set & other_set) # 输出 {3, 4, 5}(交集)
5. 数组(Array)
Python中的数组可以通过array
模块实现,但通常使用NumPy中的数组来处理更高级的数学和科学计算。
特性:
- 可以存储大量元素,支持高效的矩阵运算。
优缺点:
- 优点:提供高效的内存使用和操作速度。
- 缺点:需要额外的库,较少使用基本Python库。
使用场景:
- 数学计算、科学研究。
示例(使用numpy):
python">import numpy as np# 创建数组
my_array = np.array([1, 2, 3, 4])# 数组运算
my_array = my_array * 2 # 每个元素乘以2print(my_array) # 输出 [2 4 6 8]
6. 栈(Stack)
栈是一种后进先出(LIFO)的数据结构。
特性:
- 使用append()和pop()方法实现。
优缺点:
- 优点:简单,使用方便。
- 缺点:只允许从一端插入和删除。
使用场景:
- 函数调用、括号匹配。
示例:
python">stack = []# 压入
stack.append(1)
stack.append(2)# 弹出
top = stack.pop() # top = 2
7. 队列(Queue)
队列是一种先进先出(FIFO)的数据结构。
特性:
- 使用
collections.deque
实现。
优缺点:
- 优点:快速的插入和删除。
- 缺点:对随机访问不友好。
使用场景:
- 任务调度、宽度优先搜索。
示例:
python">from collections import dequequeue = deque()# 入队
queue.append(1)
queue.append(2)# 出队
first = queue.popleft() # first = 1
8. 链表(Linked List)
链表是一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。
特性:
- 动态大小,效率高。
优缺点:
- 优点:插入和删除速度快。
- 缺点:需要额外的存储空间,访问时从头遍历。
使用场景:
- 数据插入和删除频繁的情况。
示例:
python">class Node:def __init__(self, data):self.data = dataself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef append(self, data):if not self.head:self.head = Node(data)returncurrent = self.headwhile current.next:current = current.nextcurrent.next = Node(data)# 使用链表
linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
9. 树(Tree)
树是一种层次数据结构,由节点组成,每个节点有零或多个子节点。
特性:
- 非线性结构,便于表示层次关系。
优缺点:
- 优点:高效的查找、插入和删除。
- 缺点:实现复杂,树的平衡需求。
使用场景:
- 文件系统、数据库索引。
示例(简单的二叉树):
python">class TreeNode:def __init__(self, value):self.value = valueself.left = Noneself.right = None# 构建二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
10. 图(Graph)
图是一种由节点和边组成的数据结构,用于表示对象及对象之间的关系。
特性:
- 可以是有向图或无向图。
优缺点:
- 优点:可以表示复杂的关系。
- 缺点:处理和实现复杂性高。
使用场景:
- 网络连接图、推荐系统。
示例(邻接表):
python">class Graph:def __init__(self):self.graph = {}def add_edge(self, u, v):if u not in self.graph:self.graph[u] = []self.graph[u].append(v)# 使用图
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)