给定N学生物理课堂中每个学生的姓名和成绩,将其存储在嵌套列表中,并打印任何二年级学生的姓名。
备注:如果有多个同年级的学生,按字母顺序排列他们的名字,然后在新的一行上打印每个名字。
输入
students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
以下是我对上述问题的建议:
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])
Ouptut
Berry
Harry
有没有办法改进这段代码。我是Python的新手,开始在黑客等级上练习
发布于 2020-03-14 07:27:37
首先,我要对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]
行set(g for _, g in students)
提取等级并删除重复项(set
)。
然后取列表中的第二个元素,这是第二个最低的级别:
>>> 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
发布于 2020-03-14 03:52:30
试试这个,这也解释了以前的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]]
发布于 2020-03-14 06:47:25
您可以使用itertools.groupby和itertools.islice来理解列表。
from itertools import groupby, islice
s = [i[0] for e in islice((list(g) for k, g in groupby(sorted(students), key=lambda x: x[1])), 1, 2) for i in e]
print(*s, sep='\n')
产出:
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
https://stackoverflow.com/questions/60682342
复制相似问题