【发布时间】:2018-05-10 21:18:44
【问题描述】:
我正在尝试为一堂课完成这项作业。说明说:
L是一个列表列表。每个项目的第一项 sublist 是学生姓名和子列表中的其余项目 是等级值(float或int)。返回一个新的列表列表,其中 每个子列表的长度为 2,形式为[student_name (str), average grade (float)]>>> average_grade([['Bob', 56, 80, 72, 90], ['Alice', 60, 88, 44, 70], ['Joe', 44, 100, 80, 60, 50]]) [['Bob', 74.5], ['Alice', 65.5], ['Joe', 66.8]]
我的代码遇到的问题是我试图能够输入列表,但只能找到整数的平均值。到目前为止,我有这个:
for int in ['Bob', 'Alice', 'Joe']:
return (map(L[sum(int)/len(int)]), map(L[sum(int)/len(int)]), map(L[sum(int)/len(int)]))
但是当我只输入一个列表时,我会得到这个:
builtins.TypeError: unsupported operand type(s) for +: 'int' and 'str'
我不确定在这里做什么。有什么帮助吗?
【问题讨论】:
-
很抱歉,您的教师认为列表是 Python 中唯一可用的数据类型。
-
我敢打赌切片在这里会很有用。
-
不要使用
int作为变量名,因为它会隐藏内置的int类型/函数。最好的方法是定义一个函数average_grade,然后使用问题陈述中建议的行average_grade([['Bob', 56, 80, 72, 90], ['Alice', 60, 88, 44, 70], ['Joe', 44, 100, 80, 60, 50]])对其进行测试,看看您的结果是否符合预期。您只需要从第一个添加每个子列表的成员,然后除以列表长度减去一(名称)。你可能在这里不需要map。 -
您可以将列表列表转换为“适当的”数据结构,例如字典列表并对其进行解析,以向您的老师表明您不同意他的实现:D