首页 > 解决方案 > 为什么 lambda 无法识别实例的属性?

问题描述

我创建了五个用于存储满足特定条件的实例的列表,并打算按实例属性“小时”对它们进行排序。我可以读取循环外的属性并单独运行这一行,没有错误。但是我运行该块,结果表明属性不存在。是什么原因造成的?我该如何解决?

  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' 

工作簿跟踪:

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])

感谢大家的回答和建议,我找到了问题所在并彻底解决。:)

标签: python

解决方案


courselist = [[] for _ in range(5)]
...
courselist.sort(key = lambda x: x.hours[0])

的每个元素courselist都是一个列表。因此,x您的 lambda 表达式中的每个都是这些列表之一。Alist没有属性hours:这显然是 a 的属性course。您需要查看这些列表以找到课程。

我们无法修复您的代码,因为您未能包含一个最小的、完整的、可验证的示例


推荐阅读