You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新二维列表中的变量?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

错误分析

  1. 第一个内层循环for f in range(len(sub_list)):把原本赋值为4的变量f重新定义成了循环索引(0和1),而且每次循环都让fours +=1,相当于统计所有子列表的元素总数,完全不是统计成绩为4的次数。
  2. 第二个内层循环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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:40:34