如何使用float作为列表中的元素对嵌套列表进行排序?

时间:2017-11-03 06:56:30

标签: python list sorting python-3.6 nested-lists

所以目前我正在学习如何在HackerRank上编码,其中一个问题就是返回第二低等级学生的名字。它是一个嵌套列表,其名称(类型字符串)和得分(浮点)作为子列表的一部分。所以一个例子是:

students = [
  ['Harry', 37.21],
  ['Berry', 37.21],
  ['Tina', 37.2],
  ['Akriti', 41],
  ['Harsh', 39]
]

根据上面的列表,正确答案会返回'Harry'和'Berry'。编译器中给出的代码是

if __name__ == '__main__':
    for _ in range(int(input())):
        name = input()
        score = float(input())`

我在给出的内容后添加的代码是for循环内的students = []if __name__ == '__main__':之后)students.append([name, score])。最后,我试图让它打印出第二低分的学生,但不确定如何去做。有什么建议? (我已经尝试了许多带有排序函数的代码行,但总是会出现某种错误,例如<floatstr对象的实例之间不支持float是不可迭代的或无法将字符串转换为浮点数,反之亦然。,抱歉,因为我尝试了许多不同的代码行,我不记得哪个代码丢失了哪个错误)首先,抱歉问题已被问到,我已经查找了几个不同的问题类似于我问的那个,但仍然无法找到答案。第二,抱歉,如果我好像在咆哮或抱怨,但是我已经被困在这个问题上一段时间了,而且它变得令人沮丧,因为如果我被困在几行代码上,如果我看到一个代码,我可能会自己开枪程序值得代码。第三,感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以将sort()函数与key一起使用,告诉它使用每个列表中的第二个元素进行排序。

students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
students.sort(key = lambda x : x[1])

# students = [['Tina', 37.2], ['Harry', 37.21], ['Berry', 37.21], ['Harsh', 39], ['Akriti', 41]]
print(students[1])

输出:

['Harry', 37.21]

答案 1 :(得分:0)

print(sorted(students, key = lambda x : x[1]))

答案 2 :(得分:0)

一种更好,更有效的方法是将值放入时将值推入堆中,然后在取出值时,它们已经处于排序顺序。而且,如果您很聪明,则可以使用此事实在该问题中仅进行一次排序,并尽早完成该问题。

from heapq import heappush

student_scores = []

if __name__ == '__main__':
    for _ in range(int(input())):
        name = input()
        score = float(input())
        heappush(student_scores, (score, name))