如何解决使用装饰器按特定条件排序-Python
像这样的列表中有名字,分数和班级
students = [['Paul',90,'a'],['Michael',50,'b'],['Gina','c'],['Marie',70,'b']]
每个班级都有口号:
a Good A
b Great B
c Best C
列表应按得分较高排序,并根据排序顺序打印名称和口号(如果2个或更多的ppl具有相同的得分,则从较高的索引打印)
因此,根据以上列表的输出应为:
Best C: Gina
Good A: Paul
Great B: Marie
Great B: Michael
首先,我尝试了2种功能,一种是对列表进行排序,另一种是打印输出,并且效果很好。
然后我想在上面添加装饰器,但是由于我不习惯使用装饰器,因此我几乎没有完成这样的编码。
def do_sort(students):
def takeSecond(elem):
return elem[1]
students.sort(key=takeSecond)
sorted_students = []
for student in students:
sorted_students.append(student)
return sorted_students
def get_list(func):
def decorated(students):
a = 'Good A'
b = 'Great B'
c = 'Best C'
do_sort(students)
newlist = []
for student in students:
if student[2] == 'a':
student[2] = a
elif student[2] == 'b':
student[2] = b
elif student[2] == 'c':
student[2] = c
newlist.append('{}:{}'.format(student[2],student[0]))
# del newlist[0]
result = []
result.append(newlist[::-1])
for each in result:
return result.pop()
return decorated
@get_list
def print_output(each_student):
output = each_student
return output
students = [['Paul','b']]
print(*print_output(students),sep='\n')
尽管它给出了正确的结果,但由于我在get_list函数中做了几乎所有事情,因此似乎并不需要真的使用print_output函数(由get_list装饰)。
我想知道这是否是使用装饰器的正确方法。 如果不是这样,我想知道一种更好的方法,因为我现在陷入了这一观念。感谢对代码进行任何更正。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。