无法向列表追加元组?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函数只返回最后一个结果?
你的代码有两个关键错误,我给你拆解一下:
列表在循环内重复初始化
你把lst=[]放在了for循环里面,这意味着每次循环都会把列表清空重置。比如第一次循环处理ICS-31时,lst会添加('ICS-31', 3),但第二次循环处理Math-3A时,又会把lst变成空列表,再添加('Math-3A', 2),所以最后print的只有最后一个元素。缺少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
相关产品推荐
相关产品推荐

