10.1 动态数组的特性
动态数组是一种在程序运行时可以改变大小的数据结构。它们允许有效地管理元素集合,添加和删除元素而无需提前确定数组大小。
在Python中,动态数组是一个列表(内置类list),可以在任意位置添加、删除和修改元素。

动态数组的特性:
- 可变大小:动态数组可以根据需要增大和缩小。
- 快速索引访问:访问元素的时间是常数
O(1)
。 - 自动内存管理:Python自动管理列表的内存分配和释放。
- 便捷的元素操作方法:内置方法可以轻松添加、删除和修改元素。
Python中动态数组的创建和使用示例:
# 创建列表
dynamic_array = [1, 2, 3, 4, 5]
# 添加元素
dynamic_array.append(6)
print(dynamic_array) # 输出: [1, 2, 3, 4, 5, 6]
# 删除元素
dynamic_array.remove(3)
print(dynamic_array) # 输出: [1, 2, 4, 5, 6]
# 索引访问
print(dynamic_array[2]) # 输出: 4
# 修改元素
dynamic_array[2] = 10
print(dynamic_array) # 输出: [1, 2, 10, 5, 6]
10.2 动态数组的优缺点
动态数组有其优缺点。让我们仔细看看。
优点:
- 灵活性:动态数组可以根据程序需求改变大小,能够有效地管理内存和处理可变数据量。
- 快速索引访问:与静态数组一样,动态数组可以在常数时间
O(1)
内快速访问元素。 - 使用方便:Python的内置方法(例如 append, remove, insert)可以简化元素的操作,使代码更易读和维护。
- 自动内存管理:Python为动态数组自动管理内存,从而解放编程人员手动分配和释放内存的需求。
缺点:
- 内存重分配:当动态数组大小增加时,可能需要重新分配内存,并将元素复制到新的内存区域。这可能暂时减慢程序的执行。
- 插入和删除元素的开销:在数组中间插入和删除元素需要移动元素,耗时
O(n)
。 - 略高的管理开销:相较于像C这样的低级语言,Python的动态数组由于自动内存管理和异常处理,会有额外的管理开销。
10.3 示例与应用
让我们看看Python中动态数组的一些使用示例。
1. 动态任务列表的实现:
tasks = []
# 添加任务
tasks.append("Task 1")
tasks.append("Task 2")
tasks.append("Task 3")
# 完成任务并将其从列表中删除
completed_task = tasks.pop(0)
print(f"Completed: {completed_task}")
print(f"Remaining tasks: {tasks}") # 输出: Remaining tasks: ['Task 2', 'Task 3']
2. 动态对象列表的实现:
students = []
# 添加学生
students.append("Alice")
students.append("Bob")
students.append("Charlie")
# 删除学生
students.remove("Bob")
print(f"Students after removal: {students}") # 输出: Students after removal: ['Alice', 'Charlie']
# 在指定位置添加学生
students.insert(1, "David")
print(f"Students after insertion: {students}") # 输出: Students after insertion: ['Alice', 'David', 'Charlie']
GO TO FULL VERSION