很难理解管道函数(map、reduce、filter、lambda)
这个函数接收两个参数,都是一些序列。第一个序列包含的是 (课程, 平均成绩)
,第二个序列包含的是 (课程, 因素)
。
这个函数需要把因素加到第二个序列中的课程上,并返回更新后的序列。(不允许使用循环,我需要用到 map、filter、reduce 和 lambda)
举个例子:
courses = (('a', [81, 78, 57])), ('b', [95, 98]), ('c', [75, 45]), ('d', [58])
factors = (('c', 15), ('a', 20))
这个函数返回:
(('a', 92.0), ('b', 96.5), ('c', 75.0), ('d', 58.0))
我成功计算了每门课程的平均成绩:
def avg_grades(courses):
def calcAVG(courseGrades):
return sum(courseGrades) / len(courseGrades) # Calculate average grade for a single course
coursesGrades = tuple(map(lambda course: (course[0],calcAVG(course[1])), courses))
return coursesGrades
1 个回答
0
你可以使用 map
、filter
和 lambda
这几个函数。
下面是解决方案:
def update_courses(courses, factors):
courses_in_factors = set(map(lambda x: x[0], factors))
courses_to_update = filter(lambda x: x[0] in courses_in_factors, courses)
updated_courses = map(lambda course: (course[0], sum(course[1]) / len(course[1]) + factors_dict[course[0]]), courses_to_update)
updated_courses_list = list(updated_courses)
other_courses = filter(lambda x: x[0] not in courses_in_factors, courses)
updated_courses_list.extend(other_courses)
return tuple(updated_courses_list)
# Test the function
courses = (('a', [81, 78, 57]), ('b', [95, 98]), ('c', [75, 45]), ('d', [58]))
factors = (('c', 15), ('a', 20))
factors_dict = dict(factors)
# Should output (('a', 92.0), ('c', 75.0), ('b', [95, 98]), ('d', [58]))
print(update_courses(courses, factors))