首页 > 解决方案 > 如何按值从列表中删除对象

问题描述

我的问题是我创建了一个包含姓名和编号的学生列表。现在的任务是按学生的号码删除学生。我的问题是我的代码不起作用。

另一个问题是它总是显示内存地址而不是对象的值。

提前致谢

班级学生:

def __init__(self, name, number):
    self.name = name
    self.number = number

from .student import Student 课程:

def __init__(self, name, code, credit, student_limit):
    self.name = name
    self.code = code
    self.credit = credit
    self.student_limit = student_limit

students = []
def add_student(self, new_student):
    self.student = new_student
    self.students.append(new_student)
    print("Student added" +str(self.students))

def remove_student_by_number(self, student_number):
    self.student_number = student_number
    if student_number in self.students: self.students.remove(student_number)
    print("Student removed" + str(self.students))

从 .course 导入课程类部门:

def __init__(self, name, code):
       self.name = name
       self.code = code

courses = []       
def add_course(self, course):
    self.course = course
    self.courses.append(course)
    print("Course added" +str(self.courses))

从 python 导入 * def main():

alice = Student("Alice", 1336)
bob = Student("Bob", 1337)

math_dept = Department("Mathematics and Applied Mathematics", "MAM")

math_course = Course("Mathematics 1000", "MAM1000W", 1, 10)

math_dept.add_course(math_course)

math_course.add_student(bob)
math_course.add_student(alice)

math_course.remove_student_by_number(alice.number)

if __name__ == "__main__":
main()

标签: python-3.x

解决方案


self.students是一个实例列表,因此如果未实现Student该方法,它将打印实例的内存地址(例如,请参见此处)。您应该尝试像或明确地打印每个属性。__str__student.namestudent.number

无论如何,您正在尝试student_number在列表中查找,Student因此它当然永远不会运行删除行。而是使用if student_number in [student.number for student in self.students]which 正在查找学生的号码列表,而不是学生列表本身。但是,在这种情况下,您还希望删除student_number作为输入的学生,因此您可能需要使用如下循环:

def remove_student_by_number(self, student_number):
    for student in self.students:
        if student.number == student_number:
            print("Student removed" + str(student.name))
            self.students.remove(student)
            break

推荐阅读