【发布时间】:2022-11-25 11:05:28
【问题描述】:
任务:提交包含 sort_people(people) 函数的文件。它获取人员列表并返回经过排序的人员列表。主要按出生日期排序(从大到小),如果有匹配项则按姓氏排序(根据通常的 Python 字符串比较升序),最后按名字排序(也是升序)。如果任何两个人在所有三个特征上都匹配,则他们的相互顺序可以是任意的。
我使用 Python sort() 方法的关键函数解决了这个任务,但这不是最好的方法,因为由于时间限制我只得到 5/10 分。
问题:帮助我使这个算法更快。
我的代码:
def compare_people(p1, p2):
date1 = datetime.strptime(p1.birth_date, '%d.%m.%Y')
date2 = datetime.strptime(p2.birth_date, '%d.%m.%Y')
if date1>date2:
return 1
elif date1<date2:
return -1
if p1.last_name > p2.last_name:
return 1
elif p1.last_name < p2.last_name:
return -1
if p1.first_name > p2.first_name:
return 1
elif p1.first_name < p2.first_name:
return -1
else:
return 0
def sort_people(people):
cmp1 = functools.cmp_to_key(compare_people)
people.sort(key=cmp1)
return people
【问题讨论】: