第十课:玩转你的“篮子” – 列表进阶与综合应用
- 时长: 90 分钟
- 教学目标:
- 复习列表的基础操作(创建、索引、增删改、遍历)。
- 学习检查列表中是否包含某个元素 (
in
运算符)。 - 学习查找元素在列表中的位置 (
.index()
) 和统计元素出现的次数 (.count()
)。 - 学习获取列表中最大值 (
max()
)、最小值 (min()
)、总和 (sum()
) 的方法。 - 学习对列表进行排序 (
.sort()
,sorted()
) 和反转 (.reverse()
)。 - 掌握如何将列表与
for
循环、while
循环和if
条件判断结合使用,解决筛选、查找、统计等问题。 - 通过综合练习,提升运用列表和控制结构解决实际问题的能力。
课程内容
1. 复习与引入 (10 分钟)
- 复习: 快速回顾上一节课列表的基础知识:列表是用
[]
创建的,元素有索引(从 0 开始),如何增.append()
,.insert()
、删.remove()
,.pop()
、改列表[索引] = 新值
、查列表[索引]
,以及用for
循环遍历列表。 - 提出问题: 老师提问:“上次我们创建了装动物、分数、待办事项的列表。现在,如果我想知道我的动物列表里有没有‘老虎’?我想知道‘小明’在学生名字列表里排在第几个?我想知道分数列表里最高分是多少?最低分是多少?所有分数的总和是多少?我想把分数从低到高或者从高到低排列起来?这些问题,我们之前学过的知识能解决吗?需要更方便的方法吗?”
- 引出新知识: 这些都是处理列表时非常常见的需求。Python 为列表提供了很多内置的“技能”(方法或函数),可以方便地完成这些任务。同时,把列表和我们学过的循环、条件判断结合起来,能解决更多更复杂的问题。
2. 在列表中查找和计数 (15 分钟)
- 检查是否存在 –
in
: 使用in
运算符可以判断一个元素是否在列表中。结果是布尔值 (True
或False
)。fruits = ["apple", "banana", "cherry", "apple"] print("banana" in fruits) # True print("orange" in fruits) # False # 可以在 if 语句中使用 if "apple" in fruits: print("列表里有苹果!")
- 查找位置 –
.index(元素值)
: 查找指定元素第一次出现在列表中的索引位置。如果元素不存在,会报错。names = ["小明", "小红", "小刚", "小红", "小丽"] print(names.index("小明")) # 0 print(names.index("小红")) # 1 (只找第一个) # print(names.index("小芳")) # 报错!
- 统计次数 –
.count(元素值)
: 统计指定元素在列表中出现的次数。fruits = ["apple", "banana", "cherry", "apple"] print(fruits.count("apple")) # 2 print(fruits.count("banana")) # 1 print(fruits.count("orange")) # 0
- 动手实践: 学生创建一个列表,使用
in
检查某个元素是否存在。使用.index()
查找元素位置,使用.count()
统计元素次数。
3. 找出最大值、最小值和总和 (10 分钟)
max(列表)
: 找出列表中最大的元素。-
min(列表)
: 找出列表中最小的元素。 -
sum(列表)
: 计算列表中所有数字的总和。(注意:sum()
只能用于存放数字的列表)。scores = [85, 92, 78, 95, 88] print("最高分:", max(scores)) # 95 print("最低分:", min(scores)) # 78 print("总分:", sum(scores)) # 438 names = ["小明", "小红", "小刚"] print("名字最长的是:", max(names)) # 按照字母顺序比较,结果可能是 '小红' 或 '小明' 或 '小刚' # print(sum(names)) # 报错!不能对字符串列表求和
- 动手实践: 学生创建一个数字列表,尝试使用
max()
,min()
,sum()
函数。
4. 给列表排序和反转 (15 分钟)
.sort()
(原地排序): 对列表中的元素进行排序。默认是升序(从小到大)。会直接修改原来的列表。scores = [85, 92, 78, 95, 88] print("排序前:", scores) scores.sort() # 默认升序 print("升序后:", scores) # 结果是 [78, 85, 88, 92, 95] names = ["小明", "小红", "小刚", "小丽"] names.sort() # 按拼音或字母顺序排序 print("名字排序后:", names) # 结果是 ['小刚', '小丽', '小明', '小红'] scores.sort(reverse=True) # 设置 reverse=True 可以降序 (从大到小) print("降序后:", scores) # 结果是 [95, 92, 88, 85, 78]
sorted(列表)
(生成新列表): 创建一个新的已排序的列表,不会改变原来的列表。通常更推荐使用sorted()
,因为它不改变原始数据。original_scores = [85, 92, 78, 95, 88] sorted_scores_asc = sorted(original_scores) # 升序 sorted_scores_desc = sorted(original_scores, reverse=True) # 降序 print("原始列表:", original_scores) # [85, 92, 78, 95, 88] print("sorted 升序:", sorted_scores_asc) # [78, 85, 88, 92, 95] print("sorted 降序:", sorted_scores_desc) # [95, 92, 88, 85, 78]
.reverse()
(原地反转): 将列表中的元素顺序颠倒,直接修改原来的列表。my_list = [1, 2, 3, 4, 5] print("反转前:", my_list) my_list.reverse() print("反转后:", my_list) # 结果是 [5, 4, 3, 2, 1]
- 动手实践: 学生创建一个列表,尝试使用
.sort()
排序(升序和降序),使用sorted()
获取排序后的新列表,使用.reverse()
反转列表。
5. 列表与条件判断、循环的结合 (20 分钟)
- 筛选列表元素: 使用
for
循环遍历列表,在循环体内部使用if
语句判断元素是否符合某个条件,如果符合就打印或进行其他操作。print("--- 筛选分数 ---") scores = [85, 92, 78, 95, 88, 65, 50] print("及格分数有:") for score in scores: if score >= 60: print(score) print("--- 找出名字里包含'小'的同学 ---") names = ["小明", "大壮", "小红", "二牛", "小丽"] for name in names: if "小" in name: # 使用 in 检查字符串是否包含子串 print(name)
- 在列表中查找第一个符合条件的元素: 使用
for
或while
循环遍历,结合if
判断条件,找到后使用break
提前退出循环。print("--- 查找第一个偶数 ---") numbers = [1, 3, 5, 8, 9, 12, 15] first_even = None # 用一个变量记录找到的第一个偶数,初始为 None for num in numbers: if num % 2 == 0: first_even = num print("找到了第一个偶数:", first_even) break # 找到后就退出循环
- 在列表中统计符合条件的元素个数: 使用
for
循环遍历,结合if
判断条件,符合条件时让计数器变量加一。print("--- 统计优秀分数 ---") scores = [85, 92, 78, 95, 88, 65, 90, 99] excellent_count = 0 # 初始化计数器 for score in scores: if score >= 90: excellent_count = excellent_count + 1 # 或者 excellent_count += 1 print("优秀的人数有:", excellent_count, "个")
- 动手实践: 学生编写代码,在一个数字列表中找出所有能被 3 整除的数字并打印。 在一个字符串列表中,找出所有长度大于 5 的字符串并打印。
6. 课堂综合练习 (15 分钟)
让学生独立完成以下练习,综合运用列表、循环和条件判断:
- 练习 1: 编写一个程序,创建一个数字列表
ages = [12, 15, 8, 19, 25, 16, 7, 14]
。- 计算并打印列表中所有年龄的总和。
- 找出并打印列表中最大的年龄和最小的年龄。
- 统计列表中未成年人(年龄小于 18)的数量。
ages = [12, 15, 8, 19, 25, 16, 7, 14] # TODO: 计算总和并打印 # TODO: 找出最大值和最小值并打印 # TODO: 统计未成年人数量并打印
- 练习 2: 编写一个程序,创建一个字符串列表
words = ["apple", "banana", "cat", "dog", "elephant", "fox"]
。- 打印列表中所有以字母 ‘e’ 开头的单词。(提示:可以使用字符串的
.startswith()
方法或索引切片加条件判断)。 - 询问用户输入一个字母,然后打印列表中所有包含这个字母的单词。
- 打印列表中所有以字母 ‘e’ 开头的单词。(提示:可以使用字符串的
- 练习 3: 编写一个程序,询问用户输入 5 个整数,将它们存储在一个列表中。然后对列表进行排序(从小到大),并打印排序后的列表。找出并打印排序后列表的中间那个数(如果列表元素是奇数个)。
7. 总结与提问 (10 分钟)
- 回顾: 回顾本节课内容:列表的进阶操作 (
in
,.index()
,.count()
,max()
,min()
,sum()
,.sort()
,sorted()
,.reverse()
),以及如何将列表与for
循环、while
循环、if
条件判断结合,实现筛选、查找、统计等功能。 - 提问:
- 如何检查数字 50 是否在列表
my_nums
中? - 如何找出列表
my_scores
中的最高分? .sort()
和sorted()
有什么区别?- 如何用
for
循环和if
语句在一个学生姓名列表中找出所有名字长度大于 3 的学生?
- 如何检查数字 50 是否在列表
- 答疑: 回答学生问题。
8. 布置课后作业 (5 分钟)
- 作业 1: 创建一个列表,存放一些商品价格(浮点数)。计算并打印所有商品的总价格、最高价格和最低价格。
- 作业 2: 创建一个列表,存放一些英文单词。要求用户输入一个字母,然后统计列表中有多少个单词是以用户输入的这个字母开头的(不区分大小写)。
- 作业 3: 编写一个程序,询问用户输入 5 个整数,将它们存储在一个列表中。然后创建一个新的空列表,将原列表中所有的偶数添加到新列表中,最后打印新列表。
- 作业 4: (选做) 编写一个程序,创建一个数字列表。找出列表中是否有重复的元素。如果找到重复的元素,打印出来(可以只打印找到的第一个重复元素即可)。(提示:可以使用嵌套循环,或者使用其他方法,挑战一下自己)。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)