Python 为什么实例的属性不能被lambda识别?
我创建了五个列表来存储满足特定条件的实例,并打算按实例属性“小时”对它们进行排序。我可以读取循环外的属性并单独运行这一行,没有错误。但是我运行了这个块,结果显示属性不存在。是什么原因造成的?我怎样才能解决它Python 为什么实例的属性不能被lambda识别?,python,Python,我创建了五个列表来存储满足特定条件的实例,并打算按实例属性“小时”对它们进行排序。我可以读取循环外的属性并单独运行这一行,没有错误。但是我运行了这个块,结果显示属性不存在。是什么原因造成的?我怎样才能解决它 File "F:/Aalto study/semester3/programming/Project_studyplan.py", line 143, in print_course courselist.sort(key = lambda x: x.hours[0]) Fi
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'
代码:
感谢所有人的回答和建议,我找到了问题所在,并彻底解决了问题。:)
课程列表的每个元素都是一个列表。因此,lambda表达式中的每个x
都是这些列表之一。列表
没有属性hours
:这显然是课程
的属性。你需要查看这些列表才能找到课程
我们无法修复您的代码,因为您未能包含。您说过要对courselist
中的5个子列表进行排序,但您的代码尝试对courselist
本身进行排序。由于courselist
中的对象是列表,因此它们没有名为hours
的属性。想必,您的选定的对象会这样做。因此,请分别对每个子列表进行排序:
for day in courselist:
day.sort(key = lambda x: x.hours[0])
(我无法测试这对于您的代码是否完全正确,因为您没有提供完整的示例。)在第143行,错误在第143行
courselist.sort(key = lambda x: x.hours[0])
更准确地说,在x.hours
中。x是一个列表。因为我不知道应该是什么时间,所以我无法修复它。列表是通过索引(非负整数)访问的。您的courselist
是一个列表列表,因此lambda中的x
是这些子列表之一。courselist
的元素是列表。因此,当您使用key=lambda x:x.hours[0]
时,x
是一个列表,而列表没有属性hours
@John anderson您能看到我的更新吗?奇怪的是,这一行可以单独运行,但不能在块中运行。也许您的意思是courselist.sort(key=lambda x:x[0].hours)
?我们无法回答这个问题,因为您没有包含实际数据。排序时,courselist
的内容是什么?如果我们不知道self
和给定的周期
是什么,我们就无法知道这一点。您确定courselist
中的所有项目都是相同的类型吗?请添加一个
courselist = [[] for _ in range(5)]
...
courselist.sort(key = lambda x: x.hours[0])
for day in courselist:
day.sort(key = lambda x: x.hours[0])
courselist.sort(key = lambda x: x.hours[0])