You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从存储类对象的列表中按姓氏删除指定学生条目

Python课程花名册删除学生功能实现

代码修改说明

你当前的drop_student方法参数命名有歧义,实际调用时传入的是姓氏字符串而非Student对象,先调整参数名再做匹配删除即可,以下是两种可行的实现方案:

方案1:通过索引删除(匹配你的需求)

先遍历找到所有姓氏匹配的学生索引,倒序删除避免正序删除导致的索引偏移问题:

def drop_student(self, last_name):
    # 倒序遍历索引,避免删除元素后索引偏移漏检
    for i in range(len(self.roster)-1, -1, -1):
        if self.roster[i].get_last() == last_name:
            self.roster.pop(i)

方案2:列表推导式重写花名册(写法更简洁)

直接生成排除目标姓氏学生的新列表赋值给roster,适合不需要保留原列表内存地址的场景:

def drop_student(self, last_name):
    self.roster = [student for student in self.roster if student.get_last() != last_name]

相关问题解答

  • 为什么不能直接用remove()?remove()需要传入完全匹配的Student对象,你传入的是字符串类型的姓氏,类型不匹配无法直接生效
  • 为什么delattr没用?delattr是用于删除对象的属性,不是删除列表中的元素,和你的需求场景不匹配
  • 可以通过删除索引的方式移除学生,方案1就是用的pop()传入匹配索引的实现逻辑

完整可运行代码

class Student:
    def __init__(self, first, last, gpa):
        self.first = first # first name
        self.last = last   # last name
        self.gpa = gpa     # grade point average

    def get_gpa(self):
        return self.gpa

    def get_last(self):
        return self.last

    def to_string(self):
        return self.first + ' ' + self.last + ' (GPA: ' + str(self.gpa) + ')'

class Course:
    def __init__(self):
        self.roster = []  # list of Student objects

    def drop_student(self, last_name):
        # 倒序遍历索引,避免删除元素后索引偏移漏检
        for i in range(len(self.roster)-1, -1, -1):
            if self.roster[i].get_last() == last_name:
                self.roster.pop(i)

    def add_student(self, student):
        self.roster.append(student)

    def count_students(self):
        return len(self.roster)

if __name__ == "__main__":
    course = Course()

    course.add_student(Student('Henry', 'Nguyen', 3.5))
    course.add_student(Student('Brenda', 'Stern', 2.0))
    course.add_student(Student('Lynda', 'Robinson', 3.2))
    course.add_student(Student('Sonya', 'King', 3.9))

    print('Course size:', course.count_students(),'students')
    
    course.drop_student('Stern')
    print('Course size after drop:', course.count_students(),'students')

运行后输出:

Course size: 4 students
Course size after drop: 3 students

内容的提问来源于stack exchange,提问作者kr003

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:45:02