当前位置:首页>python>课程五:Python列表生成式——用一行代码玩转数据

课程五:Python列表生成式——用一行代码玩转数据

  • 2026-10-11 08:44:42
课程五:Python列表生成式——用一行代码玩转数据

适合对象:零编程基础的大一新生  课程目标:理解列表生成式的语法与优势,能用其快速生成、筛选和转换数据。


课程大纲

模块1:列表生成式初体验——为什么需要它?

1.1 传统循环的痛点

  • 问题:如何生成一个包含1到10平方数的列表?

  • 传统方法:用for循环逐个计算并追加到列表。

    squares = []for x in range(1, 11):    squares.append(x * x)print(squares)  # 输出: [1, 4, 9, 16, ..., 100]
  • 缺点:代码冗长,需手动初始化列表和追加元素。

1.2 列表生成式的魔法

  • 解决方案:用一行代码实现相同功能。

    squares = [x * x for x in range(1, 11)]print(squares)  # 输出: [1, 4, 9, 16, ..., 100]
  • 核心语法:

    [表达式 for 变量 in 可迭代对象]
  • 优势:简洁、高效、易读。

1.3 动手实验

  • 任务:用列表生成式生成1到20的偶数列表。

  • 提示:结合range的步长和if条件。

  • 参考答案:

    evens = [x for x in range(2, 21, 2)]

模块2:筛选数据——让列表更“聪明”

2.1 带条件的列表生成式

  • 语法:在for后添加if条件,仅保留满足条件的元素。

    # 生成1到10中偶数的平方even_squares = [x * x for x in range(1, 11) if x % 2 == 0]print(even_squares)  # 输出: [4, 16, 36, 64, 100]
  • 对比传统方法:

    # 传统循环需嵌套if判断even_squares = []for x in range(1, 11):if x % 2 == 0:      even_squares.append(x * x)

2.2 多条件筛选

  • 任务:筛选出1到100中能被3或5整除的数。

  • 解决方案:

    divisible_nums = [x for x in range(1, 101) if x % 3 == 0or x % 5 == 0]

2.3 避坑指南

  • 错误示例:在if后加else会报错!

    # 错误写法(SyntaxError)[x for x in range(1, 11) if x % 2 == 0else0]
  • 原因:for后的if是筛选条件,不能带else。


模块3:转换数据——让列表“变形”

3.1 表达式中的复杂操作

  • 任务:将字符串列表中的每个单词转为大写。

    words = ["hello", "world", "python"]upper_words = [word.upper() for word in words]print(upper_words)  # 输出: ['HELLO', 'WORLD', 'PYTHON']
  • 扩展:结合条件筛选特定长度的单词。

    long_words = [word.upper() for word in words if len(word) > 4]

3.2 处理混合类型数据

  • 问题:列表中包含字符串和数字,如何安全转换?

  • 错误示例:直接对数字调用lower()会报错。

    mixed_list = ["Hello", 18, "World", None]# 错误写法(AttributeError)[item.lower() for item in mixed_list]
  • 解决方案:用isinstance判断类型。

    safe_lower = [item.lower() if isinstance(item, str) else item for item in mixed_list]

3.3 互动练习

  • 任务:给定一个学生成绩列表(含姓名和分数),筛选出及格(≥60)的学生姓名。

  • 提示:假设数据格式为[("张三", 85), ("李四", 45), …]。

  • 参考答案:

    students = [("张三", 85), ("李四", 45), ("王五", 72)]passed_students = [name for name, score in students if score >= 60]

模块4:嵌套循环与字典生成式

4.1 两层循环生成全排列

  • 任务:生成字母'A'、'B'与数字1、2的所有组合。

    combinations = [m + str(n) for m in ["A", "B"] for n in [1, 2]]print(combinations)  # 输出: ['A1', 'A2', 'B1', 'B2']
  • 对比传统方法:

    # 传统循环需嵌套两层combinations = []for m in ["A", "B"]:for n in [1, 2]:      combinations.append(m + str(n))

4.2 字典生成式

  • 语法:用{键表达式: 值表达式 for 变量 in 可迭代对象}生成字典。

    # 将列表转为字典:元素作为键,长度作为值words = ["apple", "banana", "cherry"]word_len = {word: len(word) for word in words}print(word_len)  # 输出: {'apple': 5, 'banana': 6, 'cherry': 6}

4.3 综合挑战

  • 任务:给定一个班级成绩字典(格式:{"张三": 85, "李四": 45}),生成及格学生名单及其成绩。

  • 参考答案:

    scores = {"张三": 85, "李四": 45, "王五": 72}passed = {name: score for name, score in scores.items() if score >= 60}

课程总结与作业

  1. 总结
    :
  • 列表生成式 = 一行代码实现循环+筛选+转换。
  • 语法:[表达式 for 变量 in 可迭代对象 if 条件]。
  • 适用场景:快速处理数据、生成测试用例、简化代码。
  1. 课后作业
    :
  • 作业1:用列表生成式生成1到100的质数列表。
  • 作业2:给定一个文件路径列表,筛选出所有.txt文件并转为小写路径。
  1. 参考资料
    :

课程特色:

  • 生活化案例
    :从成绩筛选、文件处理等场景切入,贴近实际需求。
  • 对比教学
    :通过传统循环与列表生成式的对比,凸显后者优势。
  • 互动练习
    :每节包含即时任务,帮助巩固知识点。
  • 避坑指南
    :提前预警常见错误(如if后加else)。

最新文章

随机文章