对多个参数排序的函数

我需要编写一个函数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',5]],[['John',5],['Alice',4]
])
iCMS 回答:对多个参数排序的函数

排序

  • 您要对多个参数进行排序,这些参数是不同的索引。您可以使用itemgetter(0,1,2),在您的情况下,您可以使用itemgetter(4,3,2,0),它需要根据尺寸动态构建

  • 添加reverse=True,以使最终成绩更高的John领先于Alice

def sort_gradebooks(*gradebooks):
    nb_attributes = len(gradebooks[0])
    s = itemgetter(*[i for i in range(nb_attributes - 1,-1,-1)]) # itemgetter(4,0)
    return sorted(gradebooks,key=s,reverse=True)

称呼它

您需要使用*ii来调用sort来传递扁平化的参数,而不是传递一个列表,而是传递多个项目

def test_sort(inp,outp):
    for i in permutations(inp):
        print(sort_gradebooks(*i) == outp)

print(sort_gradebooks(*[['Alice','Smith',4],['John',5]])) # John / Alice because final grade
print(sort_gradebooks(*[['Alice',5],5]])) # John / Alice because name
print(sort_gradebooks(*[['Alice',5,5]])) # Alice / John because 2ng grade
本文链接:https://www.f2er.com/2229809.html

大家都在问