数组

Python SELF ZH
第 51 级 , 课程 3
可用

4.1 数组的定义和属性

数组是一个数据结构,代表的是同类型元素的有序集合,存储在连续的内存单元中。数组中的每个元素都有一个唯一的索引,通过它可以访问该元素。

这里是一个简单数组,大小为4,包含元素(1, 2, 3 和 4)。

数组的定义和属性

数组的属性:

  • 固定大小:数组的大小是在创建时设置的,不可在程序执行过程中更改
  • 元素同质性:数组中的所有元素必须是同一类型(例如,整数,字符串)。
  • 内存中的连续位置:数组元素存储在连续的内存单元中,这保证了快速的索引访问。
  • 快速索引访问:访问数组中的任何元素都需要常数时间O(1)

4.2 数组的使用示例

让我们看看你可能已经知道的数组使用示例:

存储固定长度数据

一周的天数,年份的月份:


# 创建一个包含一周天数的数组
days_of_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
print(days_of_week[2])  # 输出: Wednesday

矩阵和多维数组

3x3矩阵:


# 创建3x3的矩阵
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[1][1])  # 输出: 5

在排序算法中的使用

排序数字数组:


# 排序数字数组
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()  # 数组排序
print(numbers)  # 输出: [1, 2, 5, 5, 6, 9]

用于存储临时数据的缓冲区

用于从文件读取数据的缓冲区:


# 创建一个大小为1024字节的缓冲区
buffer = [0] * 1024
print(len(buffer))  # 输出: 1024

4.3 数组的基本操作

重要!Python中的list类是一个动态数组,它可以在运行期间改变其大小。关于动态数组的更多内容将在之后的课程中详细讲解。

基本操作:索引访问,插入,删除

索引访问

可以通过指向它位置的索引访问数组的元素。


# 通过索引访问数组元素
arr = [10, 20, 30, 40, 50]
print(arr[2])  # 输出: 30
print(arr[-1])  # 输出: 50 (最后一个元素)

插入

在数组中插入一个元素可能需要移动所有后续元素以为新元素腾出空间。

示例(在数组中间插入元素):


# 在数组中插入元素
arr = [10, 20, 30, 40, 50]
arr.insert(2, 25)  # 在位置2插入25
print(arr)  # 输出: [10, 20, 25, 30, 40, 50]

删除

从数组中删除一个元素可能需要移动所有后续元素以填补空缺。

示例(删除元素):


# 从数组中删除元素
arr = [10, 20, 30, 40, 50]
arr.pop(2)  # 删除位置2的元素
print(arr)  # 输出: [10, 20, 40, 50]

4.4 使用数组的优缺点

我们来看看使用数组的优缺点:

优点:

  • 快速的索引访问:访问数组中的任意元素都只需常数时间O(1),这使得数组在读取数据时非常高效。
  • 简单实现:数组简单易懂且易于使用,在各种任务中都容易实现和应用。
  • 低开销:与更复杂的数据结构(如链表)相比,数组占用更少的内存。

缺点:

  • 固定大小:数组的大小在创建时设置,不能更改。这意味着需要提前知道数组的大小或使用动态数组以便根据需要增加大小。
  • 插入和删除的时间成本:插入和删除元素可能需要移动元素,时间成本较高。在最坏情况下,插入或删除数组中间的元素需要O(n)时间。
  • 内存使用效率低下:如果数组未被完全使用,未填满的内存单元将导致内存使用效率低下。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION