【发布时间】:2020-09-19 12:55:51
【问题描述】:
我需要编写一个函数sort_gradebook(gradebook),它有下一个参数:[first_name, last_name, grade_1, grade_2, ..., grade_n, final_grade]。函数必须排序:
- 期末成绩
- 如果最终成绩相同 - 一年级
- 如果一年级相等 - 通过二年级等
- 如果所有成绩都相同 - 按第二个名字
- 如果第二名相同 - 按名称。
我能做的一切:
from operator import itemgetter
def sort_gradebook(*gradebook):
length = len([str(i) for i in gradebook[0]])
a = [i for i in range(length)]
for i in a:
s = sorted(gradebook, key = itemgetter(i))
return s
测试用:
from itertools import permutations
def test_sort(inp, outp):
for i in permutations(inp):
assert sort_gradebook(list(i)) == outp
test_sort([['Alice', 'Smith', 2, 3, 4],
['John', 'Smith', 2, 3, 5]], [['John', 'Smith', 2, 3, 5],
['Alice', 'Smith', 2, 3, 4]
])
【问题讨论】:
-
那么,成绩的数量可以改变吗?
-
你错过了
reverse,因为约翰的期末成绩更高并且排在第一 -
@Mandera 不,不是。我已经看到了那些答案。它们适用于 2 个论点,但不适用于更多论点……或者我不知道如何将它用于多个论点……无论如何,如果有人可以解释,我将不胜感激,如何应用该答案我的问题。
-
@SultanTapi 哦,好吧,我知道你怎么能这么想。你错过的是
sort的key参数可以处理一个元组,这意味着你可以有无限的键,而不仅仅是他们在示例中使用的两个。
标签: python python-3.x code-inspection