Jey*_*Key 0 python sorting python-3.x
我创建了名为 Student() 的类,其属性为 name 和 surname。在那个类中,我创建了类变量 -> all_students = []
创建对象时,它会被添加到该类变量 = all_students 中。
如何按属性名称的长度从最长到最短对对象列表进行排序?
import operator
class Student:
all_students = []
def __init__(self, name, surname):
self.name = name
self.surname = surname
Student.all_students.append(self)
s_1 = Student("Jacobbbb", "anything")
s_2 = Student("Mat", "anything1")
s_3 = Student("Marcooooooo", "sss")
new_list = sorted(Student.all_students, key=operator.attrgetter(len('name')))
for student in new_list:
print(student.name)
Run Code Online (Sandbox Code Playgroud)
我试过用运营商,但我不能这样做。将不胜感激的帮助。
您快到了。您只需要稍微更改您的密钥即可使用lambda:
sorted(Student.all_students, key=lambda x: -len(x.name))
Run Code Online (Sandbox Code Playgroud)
这将按姓名长度的降序对您的学生列表进行排序(注意-len(...).
如果您想使用attrgetter,则需要将密钥更改为key=lambda x: -len(operator.attrgetter('name')(x))。但在这一点上,使用x.name.
这是一个演示。我添加了一个__repr__方法,所以它变得更清晰。
In [320]: def __repr__(self): return 'Student(%s %s)' %(self.name, self.surname)
In [321]: Student.__repr__ = __repr__
In [322]: sorted(Student.all_students, key=lambda x: -len(x.name))
Out[322]: [Student(Marcooooooo sss), Student(Jacobbbb anything), Student(Mat anything1)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |