HackerRank题解:
#python3.0上
要求输入先输入一个整数n,表示学生的数目,再输入一组[["herry",50],["pote",45],["hello",45]]这样的数,然后输出:
hello
pote
初代码:
arrag = dict() #定义字典用来存值
temp =list() #存成绩
temp1 = list()#存姓名
for x in range(int(input())):
name = input()
score=float(input())
arrag[name]=score
for value in arrag.values():
temp.append(value)
temp.sort()
a=min(temp)
while a==min(temp):
temp.remove(min(temp))
temp.remove(min(temp))
for key in arrag.keys():
if arrag[key] ==min(temp):
temp1.append(key)
print(temp)
print(sorted(temp1))
局部优化后的代码:
arrag = dict() #定义字典用来存值
for x in range(int(input())):
name = input()
score=float(input())
arrag[name]=score
temp=arrag.values()
data=sorted(list(set(temp)))[1]
lowest = [] #存姓名
for key in arrag.keys():
if arrag[key]==data:
lowest.append(key)
for name in sorted(lowest):
print(name)
优化部分:主要是用函数优化减少了部分循环,其中set()的利用最为典型,用来创建一个无序不重复集合,不用再去一个个的删除重复部分,可以直接的排序成绩,取得倒数第二的成绩。
浓缩版(copy大佬):
marksheet = []
for _ in range(0,int(input())):
marksheet.append([input(), float(input())])
second_highest = sorted(list(set([marks for name, marks in marksheet])))[1]
print('\n'.join([a for a,b in sorted(marksheet) if b == second_highest]))
|