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

无法向列表追加元组?Python enrollments函数返回结果异常求助

解答你的两个Python问题

问题1:无法向列表追加元组?

这种情况通常是几个常见的小失误导致的,我给你列最可能的原因和解决办法:

  • 语法错误:没给元组加括号
    很多新手会犯这个错:直接写lst.append(1, 2),但append()只接受一个参数,元组需要用括号包裹成一个整体,正确写法是lst.append((1, 2))。

  • 列表未初始化
    如果在调用append()前没有创建空列表,比如直接写lst.append(("a", "b"))但之前没执行lst = [],会抛出NameError,记得先初始化列表。

  • 变量名冲突
    要是你之前把lst赋值成了其他类型(比如整数、字符串),再调用append()就会报错AttributeError,检查下变量名有没有被误用。

举个正确的示例:

student_list = []
student_tuple = ("Bob", "ICS-31")
student_list.append(student_tuple)
print(student_list)  # 输出:[('Bob', 'ICS-31')]

问题2:enrollments函数只返回最后一个结果?

你的代码有两个关键错误,我给你拆解一下:

  1. 列表在循环内重复初始化
    你把lst=[]放在了for循环里面,这意味着每次循环都会把列表清空重置。比如第一次循环处理ICS-31时,lst会添加('ICS-31', 3),但第二次循环处理Math-3A时,又会把lst变成空列表,再添加('Math-3A', 2),所以最后print的只有最后一个元素。

  2. 缺少return语句
    函数定义里声明了要返回二元组列表,但你没有写return lst,所以函数执行完只会打印内容,实际返回的是None,这不符合你的需求。

修正后的代码如下:

def enrollments(db : {str:{(str,str)}}) -> [(str,int)]:
    lst = []  # 把列表初始化移到循环外面,只创建一次
    for node, value in db.items():
        lst.append((node, len(value)))  # 每次循环往同一个列表里加元素
    print(lst)
    return lst  # 返回最终的完整列表

# 测试调用
output = enrollments({'ICS-31': {('Bob', 'A'), ('David', 'C'), ('Carol', 'B')}, 'Math-3A': {('Bob', 'B'), ('Alice', 'A')} })
print(output)  # 输出:[('ICS-31', 3), ('Math-3A', 2)]

这样修改后,整个循环过程中列表会持续收集所有键的统计结果,最后返回完整的列表,就能得到你想要的输出了。

内容的提问来源于stack exchange,提问作者f0rex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:33:34