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