Python 查找嵌套列表程序的第二大编号
在一个由N名学生组成的物理课堂上,为每个学生提供姓名和成绩,将其存储在嵌套列表中,并打印所有成绩第二低的学生的姓名 注意:如果有多个学生成绩相同,请按字母顺序排列他们的名字,并在新行上打印每个名字 输入 以下是我回答上述问题的代码:-Python 查找嵌套列表程序的第二大编号,python,list,Python,List,在一个由N名学生组成的物理课堂上,为每个学生提供姓名和成绩,将其存储在嵌套列表中,并打印所有成绩第二低的学生的姓名 注意:如果有多个学生成绩相同,请按字母顺序排列他们的名字,并在新行上打印每个名字 输入 以下是我回答上述问题的代码:- marks = sorted([student[i][1] for i in range(len(student))], reverse = True) for num in range(1,len(marks)): if marks[num] <
marks = sorted([student[i][1] for i in range(len(student))], reverse = True)
for num in range(1,len(marks)):
if marks[num] < marks[0]:
if marks[num+1] < marks[num]:
temp = marks[num+1]
break
else:
continue
second_top = [student[i] for i in range(len(student)) if student[i][1] == temp]
topper = sorted([k for k,l in second_top])
for i in range(len(topper)):
print(topper[i])
是否有办法改进此代码。我是Python新手,开始在黑客级别上练习
students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
ranked = sorted(students, key=lambda a: (a[1], a[0]))
second_best = ranked[1][1] # or whichever rank you want
print(ranked)
ex_aequos = [s for s in ranked if s[1] == second_best]
print(ex_aequos)
结果:
[['Akriti', 41], ['Harsh', 39], ['Berry', 37.21], ['Harry',
37.21], ['Tina', 37.2]]
[['Berry', 37.21], ['Harry', 37.21]]
试试这个,这也解释了ex aequos的原因:
students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
ranked = sorted(students, key=lambda a: (a[1], a[0]))
second_best = ranked[1][1] # or whichever rank you want
print(ranked)
ex_aequos = [s for s in ranked if s[1] == second_best]
print(ex_aequos)
结果:
[['Akriti', 41], ['Harsh', 39], ['Berry', 37.21], ['Harry',
37.21], ['Tina', 37.2]]
[['Berry', 37.21], ['Harry', 37.21]]
您可以使用列表理解和: 输出:
Berry
Harry
Berry
Harry
另一种方法是将您的数据存储在一个表中,其中键是分数,值是一个列表,其中包含所有具有键指定的分数的学生:
from collections import defaultdict
grade_student = defaultdict(list)
for student, grade in students:
grade_student[grade].append(student)
# second lowest grade
second_grade = sorted(grade_student.keys())[1]
# order the names alphabetically and print each name on a new line
print(*sorted(grade_student[second_grade]), sep='\n')
输出:
Berry
Harry
Berry
Harry
您可以使用列表理解和: 输出:
Berry
Harry
Berry
Harry
另一种方法是将您的数据存储在一个表中,其中键是分数,值是一个列表,其中包含所有具有键指定的分数的学生:
from collections import defaultdict
grade_student = defaultdict(list)
for student, grade in students:
grade_student[grade].append(student)
# second lowest grade
second_grade = sorted(grade_student.keys())[1]
# order the names alphabetically and print each name on a new line
print(*sorted(grade_student[second_grade]), sep='\n')
输出:
Berry
Harry
Berry
Harry
首先,我将按y升序对等级进行排序:
>>> students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
>>> grades = sorted(set(g for _, g in students))
>>> grades
[37.2, 37.21, 39, 41]
学生中g,g的行集合提取成绩并删除重复集合
然后选择列表中的第二个元素,即第二个最低等级:
>>> second_lowest_grade = grades[1]
>>> second_lowest_grade
37.21
>>> for name in sorted(n for n, g in students if g == second_lowest_grade):
... print(name)
...
Berry
Harry
然后为成绩第二低的学生循环排列好的名字:
>>> second_lowest_grade = grades[1]
>>> second_lowest_grade
37.21
>>> for name in sorted(n for n, g in students if g == second_lowest_grade):
... print(name)
...
Berry
Harry
首先,我将按y升序对等级进行排序:
>>> students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
>>> grades = sorted(set(g for _, g in students))
>>> grades
[37.2, 37.21, 39, 41]
学生中g,g的行集合提取成绩并删除重复集合
然后选择列表中的第二个元素,即第二个最低等级:
>>> second_lowest_grade = grades[1]
>>> second_lowest_grade
37.21
>>> for name in sorted(n for n, g in students if g == second_lowest_grade):
... print(name)
...
Berry
Harry
然后为成绩第二低的学生循环排列好的名字:
>>> second_lowest_grade = grades[1]
>>> second_lowest_grade
37.21
>>> for name in sorted(n for n, g in students if g == second_lowest_grade):
... print(name)
...
Berry
Harry