簡體   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