繁体   English   中英

内部有条件 function 的列表理解

[英]List comprehension with conditional function inside

我想用里面的条件 function 编写列表理解。 这是我到目前为止所拥有的

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)

output 应该是 = ['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将确定是否应将元素添加到列表中,而不是“转换”元素本身

您实际上并不需要进行列表理解,而是可以将map应用于您的列表以在列表的每个条目上调用 function。 结果将是一个迭代器,它由先前列表中每个值的返回值组成:

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)]

其中,因为非空字符串是truthy ,所以与:

studen_classficatin = [result for result in more_grades if True]

这与:

studen_classficatin = [result for result in more_grades]

这与复制more_grades相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM