常用数据结构之列表 2
常用数据结构之列表-2:方法、生成式与应用场景实战
📍 列表的方法(List Methods)
在 Python 中,列表是可变对象(mutable object),意味着你可以动态地添加、删除、查找和排序其中的元素。掌握这些方法,不仅能提升你的代码简洁度,更是实际开发中不可或缺的技能。
🔧 添加和删除元素:增删改查的核心
✅ 添加:append()
与 insert()
languages = ['Python', 'Java', 'C++']
languages.append('JavaScript') # 追加到末尾
languages.insert(1, 'SQL') # 插入到指定位置
方法 | 作用 | 典型用途 |
---|---|---|
append() |
添加到列表末尾 | 实时记录、增长型数据结构 |
insert() |
插入到指定索引位置 | 按顺序组织元素、表格插入行等 |
❌ 删除:remove()
、pop()
、clear()
、del
languages.remove('Java') # 删除指定元素
temp = languages.pop(1) # 删除索引位置元素并返回
languages.clear() # 清空列表
del languages[0] # 删除指定索引元素(更底层)
方法 | 作用 | 注意事项 |
---|---|---|
remove(x) |
删除第一个等于 x 的元素 | 若不存在会抛异常,建议先判断再删 |
pop([i]) |
删除索引 i 的元素并返回 | 若 i 越界抛 IndexError |
clear() |
清空列表所有元素 | 相当于重置为空列表 |
del |
关键字删除(不返回值,性能更优) | 比如 del lst[3] 删除索引为 3 的元素 |
🔍 小贴士:
lst = ['Python', 'Python', 'Java']
lst.remove('Python') # 只删除第一个出现的元素
🔍 元素位置与频次:index()
与 count()
items = ['Java', 'Python', 'Python', 'C++']
print(items.index('Python')) # 输出 1
print(items.count('Python')) # 输出 2
方法 | 功能 |
---|---|
index(x) |
返回第一个等于 x 的元素的索引 |
count(x) |
返回 x 在列表中出现的次数 |
⚠️ 注意:index()
不存在会抛出 ValueError
。
🔄 排序与反转:sort()
与 reverse()
items = ['Python', 'Java', 'C++']
items.sort() # 默认升序排序(原地排序)
items.reverse() # 反转顺序
方法 | 作用 | 注意点 |
---|---|---|
sort() |
排序 | 修改原列表,可指定 reverse=True |
reverse() |
反转顺序 | 同样修改原列表 |
🧠 进阶用法:
items.sort(key=len) # 按元素长度排序
items.sort(key=str.lower) # 忽略大小写排序
⚡ 列表生成式(List Comprehension)
Python 中的一种高级语法糖,用于快速创建列表,高效、优雅、性能好,推荐日常开发中广泛使用。
🎯 使用场景一:筛选符合条件的数
# 找出1-99之间能被3或5整除的数
items = [i for i in range(1, 100) if i % 3 == 0 or i % 5 == 0]
🎯 使用场景二:映射处理每个元素
nums1 = [35, 12, 97]
nums2 = [num ** 2 for num in nums1] # 平方
🎯 使用场景三:筛选并保留原始值
nums2 = [num for num in nums1 if num > 50] # 保留大于50的
📌 为什么推荐?
- 更简洁:一行胜千行;
- 更快:底层
LIST_APPEND
比append()
更快; - 更直观:表达式即逻辑。
🧊 嵌套列表:二维数据的天然结构
列表中的元素也可以是列表,用来表示二维表格或矩阵等结构。
scores = [[95, 83, 92], [80, 75, 82]]
print(scores[0][1]) # 输出第一名学生第二门课成绩:83
📥 从键盘录入生成嵌套列表
scores = []
for _ in range(5):
scores.append([int(input('请输入成绩: ')) for _ in range(3)])
🎲 随机生成嵌套成绩数据
import random
scores = [[random.randint(60, 100) for _ in range(3)] for _ in range(5)]
📌 实用提示:
场景 | 示例 |
---|---|
表格/学生成绩 | scores[学生索引][课程索引] |
游戏地图/二维数组操作 | map[row][col] |
图像像素/颜色通道矩阵 | pixels[y][x] |
🎰 列表应用案例:双色球号码生成器
✨ 案例目标:
- 红球从 1\~33 中选出 6 个(不能重复)
- 蓝球从 1\~16 中选出 1 个
✅ 基础实现
import random
red_balls = list(range(1, 34))
selected_reds = random.sample(red_balls, 6)
selected_reds.sort()
blue_ball = random.choice(range(1, 17))
print('红球:', selected_reds, '蓝球:', blue_ball)
🔁 多注生成
for _ in range(5):
reds = sorted(random.sample(range(1, 34), 6))
blue = random.choice(range(1, 17))
print('红球:', reds, '蓝球:', blue)
🎨 使用 rich 美化输出(终端彩色输出)
pip install rich
from rich.console import Console
from rich.table import Table
console = Console()
table = Table(title="双色球选号")
table.add_column("序号", justify="center")
table.add_column("红球", justify="center")
table.add_column("蓝球", justify="center")
for i in range(5):
reds = sorted(random.sample(range(1, 34), 6))
blue = random.choice(range(1, 17))
table.add_row(
str(i + 1),
f"[red]{' '.join(f'{r:02}' for r in reds)}[/red]",
f"[blue]{blue:02}[/blue]"
)
console.print(table)
🧠 总结:写列表,就该这样想!
能力 | 对应方法或技巧 | 场景 |
---|---|---|
创建列表 | [] , list() , 生成式 |
初始数据、变换数据 |
访问与修改 | lst[i] , lst[i:j] |
精准定位、切片处理 |
增删元素 | append , insert , remove , pop |
动态构造/精简列表 |
查找与统计 | index , count |
数据定位、频次分析 |
排序与反转 | sort , reverse |
数据整合、排序输出 |
嵌套结构 | list of lists |
表格、矩阵、二维空间 |
快速构建与筛选 | 列表生成式(list comprehension) | 数据生成、筛选、变换 |
学会列表操作,你将拥有处理一切“线性数据结构”的核心武器! 接下来我们将学习列表推导式进阶与函数式编程结合的高级用法,发送 “列表-3” 即可继续!
如需完整练习题、可打印总结表、或代码样例打包下载,请告诉我。