常用数据结构之列表(二)
# 常用数据结构之列表(二)
## 列表的方法
### 添加和删除元素
```python
languages = ['Python', 'Java', 'C++']
# 添加
languages.append('JavaScript') # 追加到末尾
languages.insert(1, 'SQL') # 插入到指定位置
# 删除
languages.remove('Java') # 移除第一个匹配项
languages.pop() # 弹出最后一个元素
languages.pop(0) # 弹出指定位置元素
languages.clear() # 清空列表
del languages[1] # del 关键字删除
```
> **注意**:`remove()` 找不到元素会引发 `ValueError`,建议先做成员判断。
### 查找元素
```python
items = ['Python', 'Java', 'Java', 'C++', 'Python']
print(items.index('Python')) # 0(第一个匹配的索引)
print(items.index('Python', 1)) # 4(从索引1开始查找)
print(items.count('Python')) # 2(出现次数)
```
### 排序和反转
```python
items = ['Python', 'Java', 'C++', 'Kotlin']
items.sort() # 升序排序
items.reverse() # 反转列表
```
## 列表生成式
列表生成式是 Python 的特色语法,用一行代码创建列表,性能优于 `for` 循环 + `append`。
```python
# 基础形式
[表达式 for 变量 in 可迭代对象]
# 示例:1-99中能被3或5整除的数
[i for i in range(1, 100) if i % 3 == 0 or i % 5 == 0]
# 平方列表
nums = [35, 12, 97, 64, 55]
squares = [num ** 2 for num in nums]
# 筛选大于50的元素
big_nums = [num for num in nums if num > 50]
```
> **建议**:创建列表优先使用生成式语法,代码简洁且效率更高。
## 嵌套列表
列表元素也可以是列表,用于表示矩阵或表格:
```python
scores = [[95, 83, 92], [80, 75, 82], [92, 97, 90]]
print(scores[0]) # [95, 83, 92]
print(scores[0][1]) # 83(第一个学生的第二门成绩)
```
**生成嵌套列表:**
```python
import random
scores = [[random.randrange(60, 101) for _ in range(3)] for _ in range(5)]
```
## 应用:双色球随机选号
```python
import random
red_balls = list(range(1, 34)) # 1-33红色球
blue_balls = list(range(1, 17)) # 1-16蓝色球
# 无放回随机抽样6个红球
selected_balls = random.sample(red_balls, 6)
selected_balls.sort()
for ball in selected_balls:
print(f'\033[031m{ball:02d}\033[0m', end=' ')
blue = random.choice(blue_balls)
print(f'\033[034m{blue:02d}\033[0m')
```
> **说明**:`random.sample(seq, n)` — 无放回抽取 n 个不重复元素
> `random.choice(seq)` — 随机抽取 1 个元素
## 总结
- 列表是可变容器,支持增删改查操作
- `append()` 追加、`insert()` 插入、`remove()` 删除、`pop()` 弹出
- **优先使用列表生成式**创建列表,性能更好
- 嵌套列表用于表示二维结构(矩阵、表格等)