列表理解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()]))