你尝试过你的代码吗?它应该工作正常你可以把它压缩成:
scores = [ student.name for student in names if student.gender == "Male" ]
请注意,调用列表名称是误导的,因为它是Student实例的列表.
您不能将列表定义为学生实例的列表;这不是Python的工作原理.
你在问如何创建你叫做名字的列表?
names = [ ]
for ( score, gender ) in :
names.append( Student( score, gender ) )
这当然等于
names = [ Student( score, gender ) for score, gender in ]
反过来
names = [ Student( *row ) for row in ]
如果您需要为每行执行大量处理,那么您可以将处理移至单独的函数或使用for循环.
def process_row( row ):
...
return score, gender
names = [ Student( *process_row( row ) ) for row in ]
响应你的编辑,我想你试图在Python中声明变量的类型.你写了:
for i in range(len(names)):
student = Student()
student = names[i]
if student.gender == "Male":
# Whatever
线学生的目的是什么?学生() – 你是否想要声明变量学生的类型?不要这样做以下将做你想要的:
for student in students:
if student.gender == "Male":
# Whatever
注意几件事情:
>我们不需要迭代范围(n),然后在名称中查找每个实例;迭代容器的每个元素都是for循环的目的.>你不需要对学生有什么要求 – 它可以是一个字符串,一个布尔值,一个列表,一个学生,无论如何.这是动态打字.同样,学生也不一定是一个名单;你可以迭代任何迭代.>当您写student.gender时,Python将获得学生的gender属性,如果没有,则会引发异常.