我创建了五个列表来存储满足特定条件的实例,并打算按instance属性“ hours”对它们进行排序。我可以读取循环外的属性,然后分别运行此行,并且没有错误。但是我运行该块,结果表明该属性不存在。是什么原因造成的?我该怎么解决?
File "F:/Aalto study/semester3/programming/Project_studyplan.py", line 143, in print_course
courselist.sort(key = lambda x: x.hours[0])
File "F:/Aalto study/semester3/programming/Project_studyplan.py", line 143, in <lambda>
courselist.sort(key = lambda x: x.hours[0])
AttributeError: 'list' object has no attribute 'hours'
WORKbook跟踪:
In [196]: courselist[0].hours
Out[196]: (9, 10)
In [199]:courselist.sort(key = lambda x: x.hours)
In [200]:courselist.sort(key = lambda x: x.hours[0])
代码:
courselist = [[] for _ in range(5)]
for selected in self.course:
if given_period == selected.period:
course_n += 1
courselist[selected.weekday-1].append(selected)
courselist.sort(key = lambda x: x.hours[0])
借助所有人的回答和建议,我找到了问题所在,并彻底解决了问题。 :)
答案 0 :(得分:1)
courselist = [[] for _ in range(5)]
...
courselist.sort(key = lambda x: x.hours[0])
courselist
的每个元素都是一个列表。因此,您的lambda表达式中的每个x
都是这些列表之一。 list
没有属性hours
:这显然是course
的属性。您需要查看这些列表以查找课程。
由于您未能包含Minimal, complete, verifiable example,因此我们无法修复您的代码。
答案 1 :(得分:1)
您说过要对courselist
中的5个子列表进行排序,但是您的代码尝试对courselist
本身进行排序。由于courselist
中的对象是列表,因此它们没有名为hours
的属性。大概您的selected
对象可以。因此,请分别对每个子列表进行排序:
for day in courselist:
day.sort(key = lambda x: x.hours[0])
(由于您尚未提供完整的示例,因此我无法测试此代码是否完全正确。)
答案 2 :(得分:0)
在143行中,错误出在行中
courselist.sort(key = lambda x: x.hours[0])
更确切地说,在x.hours
中。 x是一个列表。由于我不知道应该几点钟,因此无法解决。通过索引(非负整数)访问列表