列表理解Python

列表理解Python,python,Python,这是问题的背景代码: class CourseList(object): def __init__(self, number): self.number = number self.students = [] print('In constructor of course list.') def addStudent(self, who): if not who.isStudent(): r

这是问题的背景代码:

class CourseList(object):

    def __init__(self, number):
        self.number = number
        self.students = []
        print('In constructor of course list.')
    def addStudent(self, who):
        if not who.isStudent():
            raise TypeError('Not a student')
        if who in self.students:
            raise ValueError('Duplicate student')
        self.students.append(who)
    def remStudent(self, who):
        try:
            self.students.remove(who)
        except:
            print (str(who) + ' not in ' + self.number)
    def allStudents(self):
        return self.students

        #for s in self.students:
            #yield s
            #print (s)
    def ugs(self):
        indx = 0
        while indx < len(self.students):
            if type(self.students[indx]) == UG:
                yield self.students[indx]
            indx += 1


sixHundred = CourseList('6.00') 

sixHundred.addStudent(ug1)

sixHundred.addStudent(g1)

sixHundred.addStudent(ug2)
输出:

Jane Doe
Mitch Peabody
John Doe
代码2

输出:

generator object genexpr at 0x000000000448C048

问题:为什么带有列表理解(代码2)的打印语句不起作用?我做错了什么?

您可以在生成器中使用list函数创建字符串列表:

print(list(x.__str__() for x in sixHundred.allStudents()))
此外,您还可以创建带有括号的列表:

new_list = [x.__str__() for x in sixHundred.allStudents()]

带圆括号的列表理解将创建一个生成器,该生成器将在结果中显示。 您应该改为使用方括号:

print([x.str() for x in sixHundred.allStudents()])
如果要获得与代码1相同的结果,请键入:

print(' '.join([x.str() for x in sixHundred.allStudents()]))

您需要在生成器上循环并打印其值,以查看您期望的值1。这不是列表理解,因为您缺少
[
]
。2.它确实可以工作,正如所写的那样-您可以从生成器表达式中看到结果对象。或者
print([x.\uu str\uuu()用于sixhunded.allStudents()])
有点违背了将其转换为生成器的目的,如果它最初是一个列表为什么要在内存中创建整个列表?我同意@AK47,这确实违背了使用生成器表达式的目的。只需在生成器上迭代:
for name in(x.\uu str\uuu()for x in sixhund.allStudents()):print(name)
。实际上,您需要使用换行符:
“\n”。join([x.str()for x in sixhund.allStudents()])
print([x.str() for x in sixHundred.allStudents()])
print(' '.join([x.str() for x in sixHundred.allStudents()]))