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
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:
range(n)
and then look up each instance in names
; iterating over every element of a container is the purpose of a for
loop.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.student.gender
, Python will get the gender
attribute of student
, or raise an exception if it doesn't have one.