sam*_*sam 19 python lambda list filter
我有一个列表,其中包含学生的分数.
s = [50,62,15,76,57,97,82,99,45,23]
Run Code Online (Sandbox Code Playgroud)
我想根据分数对学生进行评分:
<40 - Fail
>50 - A Grade
>75 - A++ Grade
Run Code Online (Sandbox Code Playgroud)
我可以通过迭代循环来做到这一点,或者我可以使用lambda找到每个列表.例如 :
>>> filter(lambda x:x>=50, s)
[50, 62, 76, 57, 97, 82, 99]
Run Code Online (Sandbox Code Playgroud)
但是,在过滤器中,我一次只能处理一个函数(例如:标记大于50).有没有办法我可以使用filter和lambda并在一行中获得所需的结果?期望输出为等级标记.(例如:50 - A,62 - A,76 - A ++ ......)
Miz*_*zor 21
定义一个带标记并返回人类可读表示的函数,你可以使用larsmans的表达式或者这个:
def grade(i):
if i<40: return "Fail"
if i>75: return "A++"
if i>50: return "A"
Run Code Online (Sandbox Code Playgroud)
使用string.format格式化每个条目并映射以迭代所有条目:
li = map(lambda x: "{0} - {1}".format(x, grade(x)), s)
Run Code Online (Sandbox Code Playgroud)
结果列表现在包含所需格式的字符串.
for i in li: print i
# output
50 - None
62 - A
15 - Fail
76 - A++
57 - A
97 - A++
82 - A++
99 - A++
45 - None
23 - Fail
Run Code Online (Sandbox Code Playgroud)
Fre*_*Foo 15
忘记lambda
,忘记filter
; 以下是一个表达式中的分级,假设A和"失败"之间存在B等级.
["fail" if g < 40 else "B" if g < 60 else "A" if g < 75 else "A++" for g in s]
Run Code Online (Sandbox Code Playgroud)
您可以使用zip
此结果s
在一个列表中获取标记和成绩.