为什么这个列表理解不起作用?

时间:2018-04-28 01:04:28

标签: python-3.x

在回应评论时,我提出了更多细节 - 这是原始问题和输入格式 根据物理类学生中每个学生的姓名和成绩,将它们存储在嵌套列表中,并打印任何具有第二低成绩的学生的姓名。

注意:如果有多个同一年级的学生,请按字母顺序排列名称,并在新行上打印每个名称。

输入格式

第一行包含一个整数,即学生数。 随后的行描述了每个学生的线路;第一行包含学生的姓名,第二行包含他们的成绩.-

示例输入 -

5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39

示例输出

0

Berry, Harry

这是我到目前为止的编码解决方案:

marksheet = []
for _ in range(int(input())):
    name = input()
    score = float(input())
    marksheet.append([name, score])
print (marksheet)  
list_score = sorted([name_scores[1]] for name_scores in marksheet)
print (list_score)
list_names = sorted([name_scores[0]] for name_scores in marksheet if 
name_scores[1] == list_score[1])
print (list_names)

一切正常,直到解释器到达list_names行 预期输出为'Harry' and 'Berry'
但是,程序只返回一个空字符串。

的问候,
贾斯汀

1 个答案:

答案 0 :(得分:0)

我使用您提供的示例输入尝试了您的代码,发现您在排队时遇到了错误:

list_names = sorted([name_scores[0]] for name_scores in marksheet if name_scores[1] == list_score[1])

list_score [1]将返回一个值为37.21的列表,并将它与int 37.21进行比较,即37.21 = [37.21],这将返回false。这就是没有结果的原因。 尝试以下代码,它将起作用:

marksheet = []
for _ in range(int(input())):
    name = input()
    score = float(input())
    marksheet.append([name, score])
print (marksheet)
list_score = sorted([name_scores[1]] for name_scores in marksheet)
print (list_score)
list_names = sorted([name_scores[0]] for name_scores in marksheet if 
name_scores[1] == list_score[1][0])
print (list_names)

输入:

5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39

输出:

[['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41.0], ['Harsh', 39.0]]
[[37.2], [37.21], [37.21], [39.0], [41.0]]
[['Berry'], ['Harry']]