HackerRank Nested Lists

//题意:给你n组数据,每组数据是一个人名对应一个分数,要求输出第二小分数的所有人名,人名不唯一

//思路:很简单选出第二小的分数,根据字典的键值对items迭代,输出,但是输出记得排序,人名按照字典序输出,见代码:

//下面这一份是沿用c++思想和写代码的方式写的,因为刚刚学python,基本习题习惯都是沿用学acm的方式():

# python3
if __name__ in '__main__':
    dict = {}
    min_score = 120
    min_second_score = 120
    p_name = ""
    lst = []
    for _ in range(int(input())):
        name = input()
        score = float(input())
        if min_score > score:
            min_score = score
        dict[name] = score
    for v in dict.values():
        if v != min_score:
            min_second_score = min(min_second_score, v)
    for k,v in dict.items():
        if v == min_second_score:
            lst.append(k)
    lst1 = sorted(lst)
    for i in lst1:
        print(i)

//这是一个比较简单的python风格代码:

# python3
if __name__ in '__main__':
    lst = []
    for _ in range(int(input())):
        name = input()
        score = float(input())
        lst.append([name, score])
        if __name__ in '__main__':         #这里直接将键值对当做元素添加到列表中有点像多维数组
            second_highest = sorted(list(set([score for name, score in lst])))[1]    #感觉这里用到的列表生成式好简洁
    print('\n'.join([a for a, b in sorted(lst, key = lambda a : a[0], reverse = False) if b == second_highest]))
    #这里用到了lambda表达式用于确定用键值对中的其中一个进行排序,'\n'.join用于将元素按照这种方式连接输出
###有哪里理解不对的地方请你指出,大家一起进步谢谢###

你可能感兴趣的:(Hackerrank)