📜  Python-测验| Python列表测验|问题 11(1)

📅  最后修改于: 2023-12-03 15:34:14.167000             🧑  作者: Mango

Python-测验| Python列表测验|问题 11

在这道题目中,我们将考察如何使用Python中列表的相关操作,特别是如何在列表内嵌套列表。

问题描述

下面是一个名为students的列表,其中包含多个列表,每个列表代表一个学生及其相应的名字、学号和三个考试成绩:

students = [
    ["张三", "001", [90, 80, 85]],
    ["李四", "002", [85, 90, 95]],
    ["王五", "003", [70, 80, 75]],
    ["赵六", "004", [80, 75, 90]],
]

请编写一个函数student_rankings(students_list),使用Python代码实现将students中的每个学生列表扩展一个新元素,该元素为该学生的总分数,按照总分数从高到低对学生进行排序,然后返回排序后的学生列表。

函数定义
def student_rankings(students_list):
    """
    对于给定的学生列表, 给每个学生的列表添加一个元素,该元素为学生的总分数
    并返回排名后的学生列表,按照总分数从高到低排序。
    
    Args:
    students_list: 嵌套列表,其中包含每个学生的姓名,学号和考试成绩列表
    
    Returns:
    排序后的学生列表,按照总分数从高到低排序
    
    Example:
    
    students = [
        ["张三", "001", [90, 80, 85]],
        ["李四", "002", [85, 90, 95]],
        ["王五", "003", [70, 80, 75]],
        ["赵六", "004", [80, 75, 90]],
    ]
    
    sorted_students = student_rankings(students)
    
    排序后的sorted_students 应为:
    
    [
        ['李四', '002', [85, 90, 95], 270],
        ['张三', '001', [90, 80, 85], 255], 
        ['赵六', '004', [80, 75, 90], 245], 
        ['王五', '003', [70, 80, 75], 225]
    ]
    """
    pass
解题思路

对于题目中给定的students列表,我们需要将每个学生的考试成绩相加得到总分,并将总分添加到该学生列表中。

for student in students:
    # 计算每个学生的成绩总和,并将总和添加到该学生列表中
    total_score = sum(student[2])
    student.append(total_score)

将学生总分计算完成后,我们需要以每个学生的总分为依据进行排序。Python提供了sorted()方法可以对列表中的元素进行排序。sorted()方法可以接受一个key 参数,该参数指定一个可调用对象(callable),并以该可调用对象的返回值作为排序的依据。因此,我们可以以每个学生的总分作为key来进行排序:

# 以学生总分为关键字,对学生列表中的元素进行降序排序
sorted_students = sorted(students, key=lambda x: x[3], reverse=True)
完整代码
def student_rankings(students_list):
    """
    对于给定的学生列表, 给每个学生的列表添加一个元素,该元素为学生的总分数
    并返回排名后的学生列表,按照总分数从高到低排序。
    
    Args:
    students_list: 嵌套列表,其中包含每个学生的姓名,学号和考试成绩列表
    
    Returns:
    排序后的学生列表,按照总分数从高到低排序
    
    Example:
    
    students = [
        ["张三", "001", [90, 80, 85]],
        ["李四", "002", [85, 90, 95]],
        ["王五", "003", [70, 80, 75]],
        ["赵六", "004", [80, 75, 90]],
    ]
    
    sorted_students = student_rankings(students)
    
    排序后的sorted_students 应为:
    
    [
        ['李四', '002', [85, 90, 95], 270],
        ['张三', '001', [90, 80, 85], 255], 
        ['赵六', '004', [80, 75, 90], 245], 
        ['王五', '003', [70, 80, 75], 225]
    ]
    """
    # 对每个学生计算总成绩
    for student in students_list:
        total_score = sum(student[2])
        student.append(total_score)
    # 按学生总成绩排序
    sorted_students = sorted(students_list, key=lambda x: x[3], reverse=True)
    return sorted_students

这样,我们就完成了这道题目。