很难理解管道函数(map、reduce、filter、lambda)

-1 投票
1 回答
39 浏览
提问于 2025-04-13 16:04

这个函数接收两个参数,都是一些序列。第一个序列包含的是 (课程, 平均成绩),第二个序列包含的是 (课程, 因素)

这个函数需要把因素加到第二个序列中的课程上,并返回更新后的序列。(不允许使用循环,我需要用到 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

你可以使用 mapfilterlambda 这几个函数。

下面是解决方案:

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))

撰写回答