“学了一堆零散技巧,遇到实际问题还是不会用?”
“别人一行代码搞定的事,我写十行还报错?”
——这是新手学完基础后最常犯的愁。
今天咱们不拆单独知识点,而是把切片、迭代、列表生成式、生成器、迭代器这5个“高级武器”,融入“学生成绩分析”的实战场景,教你怎么组合使用,让代码效率翻倍。
场景导入:处理班级成绩数据
假设我们有一份班级成绩数据:scores = [85, 92, 78, 90, 88, 65, 72, 95, 83, 79, 58, 81],需要完成“提取高分、计算排名、生成分析报告”等任务,咱们用高级特性一步步搞定。
一、切片:3秒提取目标数据
需求:提取前5名成绩、后3名成绩,以及所有成绩的倒序排列。用切片不用循环,精准又快速。
scores = [85, 92, 78, 90, 88, 65, 72, 95, 83, 79, 58, 81]sorted_scores = sorted(scores)top3 = sorted_scores[-3:]print("前三名成绩:", top3) # 输出[90, 92, 95]top3_desc = sorted_scores[-3:][::-1]print("前三名(从高到低):", top3_desc) # 输出[95, 92, 90]middle = sorted_scores[5:10]print("中间5名成绩:", middle) # 输出[79, 81, 83, 85, 88]
避坑点:切片可以叠加使用(如[-3:][::-1]),但要注意顺序,先取范围再反转,不能搞反。
二、迭代+列表生成式:一行生成分析数据
需求:给每个成绩标注“等级”(≥90优秀,≥80良好,否则合格),生成“成绩-等级”的对照表。用迭代+列表生成式,一行替代3行循环。
score_level = [ (score, "优秀") if score >= 90 else (score, "良好") if score >= 80 else (score, "合格") for score in scores]print("成绩等级对照表:", score_level)good_scores = [s for s, level in score_level if level != "合格"]print("良好及以上成绩:", good_scores)
列表生成式的核心是“表达式+循环+条件”,比普通for循环代码短、执行快,是Python的“招牌技巧”。
三、生成器:处理大数据不卡机
需求:如果班级有10万学生,计算每个学生的“成绩排名百分比”(如95分是99%的排名,意味着比99%的人高)。用生成器按需计算,避免内存爆炸。
def rank_percent(large_scores): sorted_large = sorted(large_scores) total = len(sorted_large) for score in large_scores: lower_count = len([s for s in sorted_large if s < score]) yield (score, round(lower_count / total * 100, 2))
large_scores = scores * 8333 rank_gen = rank_percent(large_scores)for _ in range(5): print("成绩-排名百分比:", next(rank_gen))
核心优势:10万条数据用列表生成式会占几十MB内存,用生成器只占几十字节,运行更流畅。
四、迭代器:统一遍历各种数据
需求:将“成绩列表”“等级字典”“生成器结果”三种不同数据,统一遍历输出分析报告。用迭代器让遍历逻辑一致,不用改代码。
score_iter = iter(scores)level_dict = {"优秀": 3, "良好": 6, "合格": 3}level_iter = iter(level_dict.items())rank_iter = rank_percent(scores)def print_iter(iterator, desc): print(f"\n{desc}:") for item in iterator: print(item)print_iter(score_iter, "成绩数据")print_iter(level_iter, "等级分布")print_iter(rank_iter, "成绩排名百分比")
迭代器的价值是“统一接口”,不管是list、dict还是生成器,都能用for循环或next()遍历,让代码更通用。
五、综合实战:生成完整分析报告
把上面的技巧组合起来,写一个“班级成绩分析”函数,一键生成报告:
def score_analysis(scores): sorted_s = sorted(scores) top3 = sorted_s[-3:][::-1] avg_score = sum(scores) / len(scores) level_count = {"优秀":0, "良好":0, "合格":0} for s in scores: level = "优秀" if s>=90 else "良好" if s>=80 else "合格" level_count[level] +=1 rank_gen = rank_percent(scores) print("=== 班级成绩分析报告 ===") print(f"平均分:{round(avg_score, 2)}") print(f"前三名成绩:{top3}") print(f"等级分布:{level_count}") print("前5名排名百分比:") for _ in range(5): print(next(rank_gen))score_analysis(scores)
今天的重点不是死记每个特性的定义,而是理解它们的“使用场景”:切片用于精准取数,列表生成式用于快速造数据,生成器用于大数据处理,迭代器用于统一遍历。
实际开发中,这些技巧往往是组合使用的,多敲几遍今天的实战代码,你就能慢慢找到感觉。
【今日任务】用今天学的技巧,处理“[15,22,31,44,53,67,72,88,91]”这组年龄数据:
① 用切片取30-80岁的年龄;
② 用列表生成式给年龄标注“青年(<30)、中年(30-60)、老年(>60)”;
③ 用生成器计算每个年龄占总人数的百分比。
以上就是今天给你分享的内容,觉得有用的话欢迎点赞收藏哦!
如果你也对Python这门编程感兴趣的话,欢迎加入我们。(小白也可以参加)
三更老师亲自上课示范,2天:理论+实操教学+直播教学演示+课后辅导获取方式:
1.
关注下方公众号↓↓↓↓
2.点赞+再看
3.在后台发送:“python” 即可领取资料福利/开通上课权限
资料已经打包好了,需要的关注公众号发送“111”领取