Python list to store class instance?

后端 未结 3 1096
不思量自难忘°
不思量自难忘° 2021-02-12 23:59

Given a python class class Student(): and a list names = []; then I want to create several instances of Student() and add them into the li

3条回答
  •  南旧
    南旧 (楼主)
    2021-02-13 00:27

    Did you try your code above? It should work fine. You can condense it into:

    scores = [ student.name for student in names if student.gender == "Male" ]
    

    Note that calling the list names is misleading, since it is a list of Student instances.

    You can't define the list to be a list of Student instances; that's not how Python works.

    Are you asking how to create the list that you've called names?

    names = [ ]
    for ( score, gender ) in :
        names.append( Student( score, gender ) )
    

    which is of course equivalent to

    names = [ Student( score, gender ) for score, gender in  ]
    

    and in turn to

    names = [ Student( *row ) for row in  ]
    

    If you need to do a lot of processing for each row then you can either move the processing into a separate function or use a for loop.

    def process_row( row ):
        ...
        return score, gender
    
    names = [ Student( *process_row( row ) ) for row in  ]
    

    Responding to your edit, I think you are trying to declare the types of variables in Python. You wrote:

    for i in range(len(names)):
        student = Student()
        student = names[i]
        if student.gender == "Male":
            # Whatever
    

    What is the purpose of the line student = Student() -- are you trying to declare the type of the variable student? Don't do that. The following will do what you intended:

    for student in students:
       if student.gender == "Male":
           # Whatever
    

    Notice several things:

    1. We don't need to iterate over range(n) and then look up each instance in names; iterating over every element of a container is the purpose of a for loop.
    2. You don't need to make any claims about what student is -- it could be a string, a boolean, a list, a Student, whatever. This is dynamic typing. Likewise, students doesn't have to be a list; you can iterate over any iterable.
    3. When you write student.gender, Python will get the gender attribute of student, or raise an exception if it doesn't have one.

提交回复
热议问题