3. 列表

列表是一种有序、可变的容器,可以随时添加和删除元素。使用 [] 创建,元素用逗号分隔。

创建列表

python
list1 = [35, 12, 99, 68, 55]
list2 = ['Python', 'Java', 'Go']
list3 = [100, 12.3, 'Python', True]  # 混合类型

# 用 list() 将其他序列转为列表
print(list(range(1, 10)))  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list('hello'))        # ['h', 'e', 'l', 'l', 'o']

▶ 运行结果:

输出
[1, 2, 3, 4, 5, 6, 7, 8, 9]
['h', 'e', 'l', 'l', 'o']

索引与切片(与字符串完全一致)

python
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(arr[0])        # 1
print(arr[-1])       # 10
print(arr[2:8:2])    # [3, 5, 7](切片 [2,8) 步长2)
print(arr[::-1])     # [10, 9, 8, ..., 1](反转)

# 列表可变:通过索引修改
arr[0] = 100
arr[1:3] = [200, 300]  # 切片赋值

▶ 运行结果:

输出
1
10
[3, 5, 7]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

列表方法

分类方法说明
添加append(x)末尾追加一个元素
insert(i, x)在索引 i 处插入元素
extend(seq)将另一个序列的元素逐一追加
删除remove(x)删除第一个值为 x 的元素
pop(i)删除并返回索引 i 处的元素
del arr[i]删除索引 i 处的元素(关键字)
排序sort()原地排序(升序),reverse=True 降序
reverse()原地反转
查询count(x)统计元素 x 出现次数
index(x)返回元素 x 第一次出现的索引

遍历列表

python
# 方法一:通过索引遍历
for i in range(len(arr)):
    print(arr[i])

# 方法二:直接遍历元素(推荐)
for elem in arr:
    print(elem)

实战:骰子模拟与频率统计

python
import random

# 用列表统计骰子各点数出现次数
counters = [0] * 6  # 初始化6个计数器
for _ in range(6000):
    face = random.randrange(1, 7)
    counters[face - 1] += 1
for face in range(1, 7):
    print(f'{face}点出现了{counters[face - 1]}次')

▶ 运行结果:

输出
1点出现了935次
2点出现了1031次
3点出现了1014次
4点出现了966次
5点出现了999次
6点出现了1055次
💡 用列表替代多个变量

不用写 6 个变量 f1, f2, ..., f6,用一个 [0]*6 列表即可。这是列表的核心优势——用索引管理同类数据。

实战:双色球选号

python
import random

n = int(input('生成几注号码:'))
red_balls = list(range(1, 34))
blue_balls = list(range(1, 17))
for _ in range(n):
    selected = random.sample(red_balls, 6)  # 无放回抽6个
    selected.sort()
    for ball in selected:
        print(f'{ball:0>2d}', end=' ')
    blue = random.choice(blue_balls)  # 抽1个蓝球
    print(f'{blue:0>2d}')

实战:冒泡排序

python
# 冒泡排序:相邻元素比较,大的往后"冒泡"
arr = [29, 12, 19, 37, 14]
n = len(arr)
for i in range(n - 1):
    for j in range(n - i - 1):
        if arr[j] > arr[j + 1]:
            arr[j], arr[j + 1] = arr[j + 1], arr[j]
print(arr)  # [12, 14, 19, 29, 37]

▶ 运行结果:

输出
[12, 14, 19, 29, 37]

嵌套列表(矩阵)

python
# 5个学生3门课程的成绩
scores = [[95, 83, 92], [80, 75, 82], [92, 97, 90]]
print(scores[0])     # [95, 83, 92](第一个学生的成绩)
print(scores[0][1])  # 83(第一个学生的第二门课)

# 用推导式生成随机矩阵
import random
matrix = [[random.randrange(60, 101) for _ in range(3)] for _ in range(5)]

▶ 运行结果:

输出
[95, 83, 92]
83