[英]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.