包含条件函数的列表推导式



我想写一个包含条件函数的列表推导式。这是我目前所拥有的

more_grades = [0.0, 50.0, 49.9, 79.0, 101.0, 65.0, 54.2, 48.2, 78.9]
def grade_classification(grade):
if grade < 40:
result = 'fail'
elif grade >= 40 and grade < 50:
result = 'Pass'
elif grade >= 50 and grade < 60:
result = '2:2'
elif grade >= 60 and grade < 70:
result= '2:1'
elif grade >= 70:
result = 'First'
else:
result = 'unknown grade'
return result
studen_classficatin = [result for result in more_grades if grade_classification(result)]
print(studen_classficatin)

输出应该是= ['Fail', '2:2', 'Pass', 'First', 'First', '2:1', '2:2', 'Pass', 'First'],但从上面的代码来看,它给了我= [0.0,50.0,49.9,79.0,101.0,65.0,54.2,48.2,78.9]我不知道我做错了什么。有什么建议吗?

改成:

studen_classficatin = [grade_classification(result) for result in more_grades]

后面的if将决定是否将元素添加到列表中,而不是"transform"元素本身

您实际上不需要进行列表理解,相反,您可以对列表应用map,以便在列表的每个条目上调用函数。结果将是一个迭代器,由前一个列表中每个值的返回值组成:

studen_classficatin = map(grade_classification, more_grades)

map返回一个迭代器,所以它实际上不做任何事情,直到你遍历列表。如果您想打印它,请在迭代器上调用list以耗尽它:

studen_classficatin = list(map(grade_classification, more_grades))

你的代码是这样的:

studen_classficatin = [result for result in more_grades if grade_classification(result)]

由于非空字符串为真值,它与:

相同studen_classficatin = [result for result in more_grades if True]

等于:

studen_classficatin = [result for result in more_grades]

这和复制more_grades是一样的。

最新更新