在python列表中将数字转换为成绩

Posted

技术标签:

【中文标题】在python列表中将数字转换为成绩【英文标题】:Convert numbers to grades in python list 【发布时间】:2012-03-31 20:28:59 【问题描述】:

我有一个列表,上面有学生的分数。

s = [50,62,15,76,57,97,82,99,45,23]

我想根据分数给学生打分:

<40 - Fail
>50 - A Grade
>75 - A++ Grade

我可以通过迭代循环来做到这一点,或者我可以使用 lambda 找到每个列表。 例如:

>>> filter(lambda x:x>=50, s)
[50, 62, 76, 57, 97, 82, 99]

但是,在过滤器中,我一次只能使用一个函数(例如:大于 50 的标记)。有没有办法可以使用过滤器和 lambda 并在一行中获得所需的结果?期望输出为带有等级的标记。 (例如:50 - A、62 - A、76 - A++ ...)

【问题讨论】:

【参考方案1】:

忘记lambda,忘记filter;下面在一个表达式中进行评分,假设在 A 和“失败”之间有一个 B 级。

["fail" if g < 40 else "B" if g < 60 else "A" if g < 75 else "A++" for g in s]

您可以通过szip 获得结果,在一个列表中获得分数和成绩。

【讨论】:

或者你可以使用地图,map(lambda x: (x, 'F' if x&lt;40 else 'A++' if x&gt;70 else 'A'), s)。或者如果你只想要成绩,就丢掉(x,(当然还有))。列表是有序的,以便您以后可以匹配它。 你的理解是 78 个字符。您可以在其中获得免费换行符。我知道这违反了 Google Python 样式规则,但我更喜欢将它们分成多行,可能在每个 else 的末尾。 @Droogans:我不知道谷歌风格的规则,但在一个实际的程序中我确实会加入一些换行符。***.com/a/5809080/166749【参考方案2】:

您可以编写自己的类似过滤器的函数:

def filter_n(n, f, lst):
    result = tuple([[] for i in range(n)])
    for elem in lst:
        result[f(elem)].append(elem)
    return result

现在的答案如下:

grades = filter_n(3, lambda x: (x < 40) * 0 +
                               (60 < x <= 75) * 1 +
                               (75 < x) * 2, s)

【讨论】:

【参考方案3】:

定义一个接受标记并返回人类可读表示的函数,您可以使用larsmans's expression 或这个:

def grade(i):
    if i<40: return "Fail"
    if i>75: return "A++"
    if i>50: return "A"

使用 string.format 格式化每个条目并映射以遍历所有条目:

li = map(lambda x: "0 - 1".format(x, grade(x)), s)

结果列表现在包含所需格式的字符串。

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

【讨论】:

【参考方案4】:
s = [50,62,15,76,57,97,82,99,45,23]
x = dict([(a, 'A++' if a>75 else 'A' if a>55 else 'F') for a in s])

print x

97: 'A++', 45: 'F', 99: 'A++', 76: 'A++', 82: 'A++', 15: 'F', 50: 'F', 23: 'F', 57: 'A', 62: 'A'

x.items()为例进行过滤

filter(lambda x: x[1] == 'A', x.items())

结果是

[(57, 'A'), (62, 'A')]

【讨论】:

一行中有 2 个作用域,其中 x 名称有所不同。与其他答案没有太大区别,因此如果您拥有编辑权限,则编辑可能比答案更适合。

以上是关于在python列表中将数字转换为成绩的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中将 Excel 列类型从 Int 转换为 String

如何在python中将一维值列表转换为0和1的二维网格[重复]

python怎么把列表转换成字符串?

如何在sql中将数字转换为日期

python怎么把列表转换成字符串?

如何在python中将十六进制字符串转换为二进制以使用cx_oracle插入