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