我的代码以邓肯·贝茨(Duncan Betts)的代码为基础,但我听不懂,自他上次登录以来似乎已经3年了,所以我不能问他。
您能解释一下“ studentrecord”代码的来源吗?什么事?
num = int(input("How many students?: "))
physics_students = [[input("Input student name: "),float(input("Input grade: "))] for studentrecord in range(num)]
physics_students.sort(key=lambda studentrecord: float(studentrecord[1]))
lowest_grade = physics_students[0][1]
ind = 0
while physics_students[ind][1] == lowest_grade:
ind += 1
second_lowest_grade = physics_students[ind][1]
second_lowest_students = []
while physics_students[ind][1] == second_lowest_grade:
second_lowest_students.append(physics_students[ind][0])
ind += 1
if ind == num:
break
second_lowest_students.sort()
print(*second_lowest_students, sep="\n")
非常感谢您的帮助!
答案 0 :(得分:3)
studentrecord
的两次出现是指2种不同的事物
在list comprehension中,studentrecord
用于保存范围range(num)
中的每个元素。它基本上是一个索引,但无论如何都从未使用过。
编辑:我不认为列表理解应该将其称为studentrecord
,因为该范围的元素是索引,而不是代表学生姓名和等级的列表。这有点令人困惑,该变量可能应该重命名为i
或_
之类。
列表理解就像这样:
physics_students = []
for studentrecord in range(num):
physics_students.append([input("Input student name: "),float(input("Input grade: "))])
或者这个:
physics_students = []
for studentrecord in range(num):
physics_students[studentrecord] = [input("Input student name: "),float(input("Input grade: "))]
在lambda expression中,studentrecord
是匿名函数的参数名称。就像这样说:
def my_lambda(studentrecord):
return float(studentrecord[1]
physics_students.sort(key=my_lambda)