Py学习  »  Python

30天入门Python(基础篇)——第7天:Python高级特性

码上编程学习社 • 1 周前 • 62 次点击  
资料已经打包好了,需要的关注公众号发送“111”领取


“学了一堆零散技巧,遇到实际问题还是不会用?”

“别人一行代码搞定的事,我写十行还报错?”

——这是新手学完基础后最常犯的愁。

今天咱们不拆单独知识点,而是把切片、迭代、列表生成式、生成器、迭代器这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]# 1. 先排序(升序),再切片sorted_scores = sorted(scores)# 提取后3名(高分,因为sorted默认升序)top3 = sorted_scores[-3:]print("前三名成绩:", top3)  # 输出[909295]# 提取后3名的倒序(从高到低)top3_desc = sorted_scores[-3:][::-1]print("前三名(从高到低):", top3_desc)  # 输出[959290]# 提取中间6-10名成绩(左闭右开,取索引5到9)middle = sorted_scores[5:10]print("中间5名成绩:", middle)  # 输出[7981838588]


避坑点:切片可以叠加使用(如[-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)# 输出示例:[(85, '良好'), (92, '优秀'), ...]# 进阶:只保留良好及以上的成绩good_scores = [s for s, level in score_level if level != "合格"]print("良好及以上成绩:", good_scores)  # 输出[85, 92, 78, ...](过滤掉65以下)


列表生成式的核心是“表达式+循环+条件”,比普通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暂停        yield (score, round(lower_count / total * 1002))


    
# 模拟10万条成绩数据(这里用12条演示,实际可替换为大数据)large_scores = scores * 8333  # 12*8333≈10万# 用生成器计算,内存占用仅几KBrank_gen = rank_percent(large_scores)# 取前5条数据查看for _ in range(5):    print("成绩-排名百分比:"next(rank_gen))


核心优势:10万条数据用列表生成式会占几十MB内存,用生成器只占几十字节,运行更流畅。

四、迭代器:统一遍历各种数据

需求:将“成绩列表”“等级字典”“生成器结果”三种不同数据,统一遍历输出分析报告。用迭代器让遍历逻辑一致,不用改代码。

# 1. 成绩列表转迭代器score_iter = iter(scores)# 2. 等级字典转迭代器(迭代键值对)level_dict = {"优秀"3"良好"6"合格"3}level_iter = iter(level_dict.items())# 3. 生成器本身就是迭代器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):    # 1. 基础统计(切片+列表生成式)    sorted_s = sorted(scores)    top3 = sorted_s[-3:][::-1]    avg_score = sum(scores) / len(scores)    # 2. 等级分布(列表生成式)    level_count = {"优秀":0"良好":0"合格":0}    for s in scores:        level = "优秀" if s>=90 else "良好" if s>=80 else "合格"        level_count[level] +=1    # 3. 生成排名百分比(生成器)    rank_gen = rank_percent(scores)    # 4. 迭代输出报告    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这门编程感兴趣的话,欢迎加入我们。(小白也可以参加)

  Python零基础实战特训营 
三更老师亲自上课示范,2天:理论+实操教学+直播教学演示+课后辅导

获取方式:

1. 关注下方公众号↓↓↓↓

2.点赞+再看

3.在后台发送:“python” 即可领取资料福利/开通上课权限

资料已经打包好了,需要的关注公众号发送“111”领取

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/190016