从零开始,带你掌握数组的核心概念与常见考法
📖 知识点详解及图示解释
1. 什么是数组?
数组(Array)是存储在连续内存空间中的相同类型元素的集合。在 Python 中,列表(list)是最常用的数组形式,可以存储任意类型的数据。

2. 数组的核心操作

3. 为什么数组可以随机访问?
核心原因:连续内存 + 固定元素大小 = 直接地址计算
数组在内存中是一段连续的空间,每个元素占用的字节数相同(类型一致),因此给定下标 i,CPU 可以直接通过公式计算出第 i 个元素的地址:
Address(a[i]) = BaseAddress + i × ElementSize

O(1) — 无论数组多大,已知数组名(可认为是已知首地址 BaseAddress),一次乘法 + 加法就能定位。
对比链表:
❌ 链表
链表节点离散存储,靠指针链接
找第 i 个元素必须从头遍历 → O(n)
没有地址计算公式可用
✅ 数组
连续内存排列,一次计算直达任意元素 → O(1)
一句话:数组把数据连续排列,CPU 用乘法 + 加法直接算出任意元素的地址,所以能随机访问。
◆ ◆ ◆
4. 数组遍历的常见模式

数组索引的常见陷阱
1下标从 0 开始
数组 a 的第一个元素是 a[0],最后一个元素是 a[n-1]。
2索引越界
访问 a[n] 会导致 IndexError,这是考试中常见的错误选项陷阱。
3负数索引
a[-1] 表示最后一个元素,a[-2] 表示倒数第二个,这在 Python 中非常实用。
🧪 真题举例
【2015年10月·选择题第12题】数组条件判断
原题有如下 Python 程序段:
a = [0, 2, 1, 3, 4, 5]
c = 0
for i in range(3, 6):
if a[i-2] + a[i-1] == a[i]:
c = c + 1
print(c)
该程序段运行后,输出的是( )
A. 1 B. 2 C. 3 D. 4
✅ 答案:B
💡 解析:循环检查从索引 3 开始的三组相邻三项是否满足前两项之和等于第三项,满足两次,因此输出 2。
【2018年11月·选择题第11题】随机数 + 条件数组处理
原题有如下 Python 程序段:
import random
a = [0] * 6
for i in range(0, 6):
a[i] = random.randint(1, 10)
for i in range(0, 5):
if i % 2 == 0 and a[i] > a[i+1]:
a[i], a[i+1] = a[i+1], a[i]
else:
a[i] = a[i] + 1
print(a)
执行程序后,a 数组各元素可能是( )
A. [11,11,7,9,3,9] B. [6,2,8,10,5,9]
C. [6,9,3,7,8,12] D. [3,9,0,8,2,7]
✅ 答案:B
💡 解析:程序先给数组赋 1~10 的随机数,然后对索引 0、2、4 进行可能交换(降序变升序),对索引 1、3 强制 +1。因此索引 0、2、4、5 只能在 1~10 之间,索引 1、3 可为 2~11。只有 B 满足。
【2023年1月·选择题第10题】有序数组插入
原题数组元素 a[0]~a[n-1] 已按升序排列,现要将 a[pos](0 ≤ pos ≤ n-1)的值加 1,并保持数组的有序性不变。实现该功能的程序段如下,方框中应填入的正确代码为:
t = a[pos] + 1 # 新值
i = pos
while ______: # 填空:条件表达式
a[i] = a[i + 1] # 元素前移
i += 1
a[i] = t # 插入新值
A. i < n - 1
B. i < n - 1 and t > a[i + 1]
C. i < n - 1 and a[i] > a[i + 1]
D. i <= n - 1 or t > a[i]
✅ 答案:B
💡 解析:新值 t 需要从 pos 开始向右移动,只要没到数组末尾且 t 仍大于下一个元素,就继续后移。因此条件是 i < n-1 and t > a[i+1]。
【2023年1月·选择题第11题】数组遍历与字符串逆序
原题对于任意非空字符串 s,甲、乙程序段输出结果相同,则乙程序段加框处的正确代码为:
# 甲程序段(递归):
def f(s, i):
if i < len(s):
return f(s, i + 2) + s[i]
return ""
# 乙程序段(循环):
n = len(s)
r = ""
for i in range(0, n, 2): # i = 0, 2, 4, ...
___(加框处)___ # 需要补全这一行
A. r = s[n-i] + r B. r = r + s[n-i-1]
C. r = r + s[i] D. r = s[i] + r
✅ 答案:D
💡 解析:甲程序段 f(s, i) 从索引 0 开始,每次递归调用 f(s, i+2),再把当前字符 s[i] 加到返回结果的后面,所以最终结果是偶数索引倒序;乙循环中 i 按 0, 2, 4, ... 从小到大遍历,因此需要把当前字符 s[i] 不断放到结果的最前面,才能得到倒序。故选 D:r = s[i] + r。
如果这篇文章对你有帮助,欢迎 点赞、分享、推荐。