我在 python 的嵌套列表上遇到问题

问题描述 投票:0回答:1

问题:-我们已经给出了学生的姓名和分数,我们必须将它们存储在嵌套列表中,并打印成绩第二低的任何学生的姓名。 在这里,如果有多个成绩第二低的学生,我们必须按字母顺序排列他们的名字,并将每个名字打印在新行上。

if __name__ == '__main__':

students = []
marks = []
names = []

    
for _ in range(int(input())):
    name = input()
    score = float(input())
    students.append([names, score])
    marks.append(score)
    
for i in range(len(marks)):
    for j in range(i+1, len(marks)):
        if marks[i] > marks[j]:
            temp = marks[i]
            marks[i] = marks[j]
            marks[j] = temp
            
lowest  = marks[0]

for i in marks:
    if i > lowest:
        second = i
        break

for i, j in students:
    if j == second:
        names.append(i)
        
for i in range(len(names)):
    for j in range(i+1, len(names)):
        if names[i] > names[j]:
            temp = names[i]
            names[i] = names[j]
            names[j] = temp

for i in names:
    print(i, sep='\n')

示例输入: 5 哈利 37.21 浆果 37.21 蒂娜 37.2 阿克里蒂 41 残酷的 39 示例输出:- 浆果 哈利

python list nested-lists
1个回答
0
投票

我不确定我做得是否尽可能正确,但总的来说它是有效的

def main():
    students = []
    n = int(input())
    for i in range(n):
        name = input()
        score = float(input())
        students.append([name, score])

    students = sorted(students, key=lambda x: (float(x[1]), x[0]))
    lowest = students.pop(0)[1]
    lowest_second = 0
    for el in students:
        if el[1] > lowest:
            lowest_second = el[1]
            break
    res = []
    for el in students:
        if el[1] == lowest_second:
            res.append(el)
    for el in res:
        print(el[0])


if __name__ == '__main__':
    main()
© www.soinside.com 2019 - 2024. All rights reserved.