@@ -349,6 +349,34 @@ print(f"终点: ({end_x}, {end_y})")
349349```
350350
351351
352+ ## 元组推导式
353+
354+ 在列表章节中,我们学习了列表推导式的强大功能。你可能会问:元组有推导式吗?
355+
356+ 答案是:** 元组本身没有推导式语法** 。使用圆括号的表达式 ` (expression for item in iterable) ` 实际上创建的是** 生成器表达式** ,而不是元组:
357+
358+ ``` python runner
359+ # 这不是元组推导式,而是生成器表达式
360+ squares_generator = (x * x for x in range (5 ))
361+ print (f " 生成器对象: { squares_generator} " )
362+ print (f " 类型: { type (squares_generator)} " )
363+ ```
364+
365+ ### 创建元组的正确方式
366+
367+ 要创建元组,需要将生成器表达式或其他可迭代对象传递给 ` tuple() ` 构造函数:
368+
369+ ``` python runner
370+ # 使用 tuple() + 生成器表达式创建元组
371+ squares_tuple = tuple (x * x for x in range (5 ))
372+ print (f " 元组推导式结果: { squares_tuple} " )
373+ print (f " 类型: { type (squares_tuple)} " )
374+
375+ # 带条件的元组创建
376+ even_squares = tuple (x * x for x in range (10 ) if x % 2 == 0 )
377+ print (f " 偶数的平方: { even_squares} " )
378+ ```
379+
352380## 命名元组
353381
354382虽然不是本章的重点,但值得了解 Python 还提供了命名元组,让元组更具可读性:
@@ -511,6 +539,15 @@ class_c = ("高一3班", 47, "王老师")
511539# 创建另一个班级信息,并比较是否相同
512540# class_a_copy = ("高一1班", 45, "张老师")
513541
542+ # 任务 9: 使用"元组推导式"(tuple() + 生成器表达式)
543+ # 创建一个包含所有班级学生人数平方的元组
544+ # student_count_squares = ...
545+
546+ # 任务 10: 创建班级代码元组
547+ # 将班级名称转换为代码格式,如 "高一1班" -> "G1C1"(高一1班)
548+ # 使用 tuple() + 生成器表达式
549+ # class_codes = ...
550+
514551```
515552
516553::: details 点击查看参考答案
@@ -556,5 +593,14 @@ print(f"班级和老师信息: {class_teacher_pairs}")
556593class_a_copy = (" 高一1班" , 45 , " 张老师" )
557594print (f " 班级信息是否相同: { class_a == class_a_copy} " )
558595print (f " 是否为同一个对象: { class_a is class_a_copy} " ) # 注意:可能因Python优化而为True
596+
597+ # 任务 9: 使用"元组推导式"(tuple() + 生成器表达式)
598+ student_count_squares = tuple (cls [1 ] * cls [1 ] for cls in all_classes)
599+ print (f " 学生人数的平方: { student_count_squares} " )
600+
601+ # 任务 10: 创建班级代码元组
602+ # 将 "高一1班" 转换为 "G1C1" 格式
603+ class_codes = tuple (f " G { cls [0 ][2 ]} C { cls [0 ][3 ]} " for cls in all_classes)
604+ print (f " 班级代码: { class_codes} " )
559605```
560606:::
0 commit comments