如何更新二维列表中的变量?Python编程新手技术问询
问题:统计二维列表中的指定元素数量
我是编程和Python新手,现在有个任务:要更新两个变量,统计二维列表里的特定内容。每个子列表包含姓名和成绩,每当子列表里出现姓名"John"就加1到johns变量,出现成绩4就加1到fours变量。
我试了几种方法都没得到正确结果,想请教怎么正确访问和遍历子列表里的元素?
我的错误代码:
grades = [['John', 2], ['Chris', 4], ['Morgan', 4], ['John', 2], ['Morgan', 2], ['Richard', 1], ['Sam', 2], ['Richard', 1], ['Morgan', 0], ['Cecilia', 2], ['Richard', 1], ['Sam', 2], ['Sam', 2], ['John', 4], ['Sam', 0]] fours = 0 johns = 0 f = 4 for i in range(len(grades)): sub_list = grades[i] for f in range(len(sub_list)): fours +=1 for 'John' in range(len(sub_list)): johns +=1
错误分析
- 第一个内层循环
for f in range(len(sub_list)):把原本赋值为4的变量f重新定义成了循环索引(0和1),而且每次循环都让fours +=1,相当于统计所有子列表的元素总数,完全不是统计成绩为4的次数。 - 第二个内层循环
for 'John' in range(len(sub_list)):语法错误,不能用字符串作为循环变量,逻辑上也不是判断子列表里是否有"John",属于无意义的循环。
正确解法
因为每个子列表的结构固定是[姓名, 成绩],可以直接遍历每个子列表并拆包成姓名和成绩变量,然后分别判断条件:
grades = [['John', 2], ['Chris', 4], ['Morgan', 4], ['John', 2], ['Morgan', 2], ['Richard', 1], ['Sam', 2], ['Richard', 1], ['Morgan', 0], ['Cecilia', 2], ['Richard', 1], ['Sam', 2], ['Sam', 2], ['John', 4], ['Sam', 0]] fours = 0 johns = 0 # 直接遍历每个子列表,拆包为name和grade for name, grade in grades: # 判断成绩是否为4 if grade == 4: fours += 1 # 判断姓名是否为John if name == 'John': johns += 1 print(f"成绩为4的次数:{fours}") print(f"姓名为John的次数:{johns}")
运行结果:
成绩为4的次数:3 姓名为John的次数:3
如果不确定子列表的顺序,或者想更通用地检查元素,可以遍历子列表里的每个元素,但针对这个固定结构的场景,直接拆包更高效清晰。
内容的提问来源于stack exchange,提问作者Sailor
相关产品推荐
相关产品推荐

