map函数有什么用处

map函数对可迭代对象的每一项数据调用函数,它的原型为:

map(func, *iterables) --> map object

func函数可以有多个参数,这就需要多个可迭代对象,两者个数要相同。在最少的 可迭代对象迭代完成时,迭代结束。

例如我们现在都要素质教育,我们不能给学生进行真正的分数,只能给学生评等级,比如 A, B, C,D,及A+,A-等等,假定我们考试成绩还是百分值,我们就需要一个换算函数, 对成绩进行换算。然后对学生成绩调用map函数:

def fn(score):
    if(score>=98):
        return "A+"
    elif(score>=92):
        return "A"
    elif(score>=90):
        return "A-"
    elif(score>=85):
        return "B+"
    elif(score>=80):
        return "B"
    elif(score>=75):
        return "B-"
    elif(score>=70):
        return "C+"
    elif(score>=65):
        return "C"
    elif(score>=60):
        return "C-"
    elif(score<=60):
        return "D"

s = map(fn, [100, 20,90, 80])
print(list(s))
#['A+', 'D', 'A-', 'B']

最后将每一个成绩按顺序转换为等级成绩。

可能素质教育来进行成绩转换的必要性并不大,但家里有小学生的,会碰到跳绳成绩计算, 跳绳为1分钟所跳次数来计算,一年级小朋友跳109个就是单项满分,17个为及格。具体成绩 计算方法见教育部网站链接。

如果我是学校小学老师,我要对每一个学生的成绩进行转换,这是map函数就派上了用场。

#男生跳绳单向得分
boy =    (100, 95,90, 85, 80,78,76,74,72,70,68,66,64,62,60,50,40,30,20,10)
#男生跳绳一分钟次数
grade1 = (109,104,99, 93, 87,80,73,66,59,52,45,38,31,24,17,14,11, 8, 5, 2)
grade2 = (117,112,107,101,95,88,81,74,67,60,53,46,39,32,25,22,19,16,13,10)

def rope(score):
    """小学一年级一分钟跳绳分数转换"""
    for i, value in enumerate(grade1):
       if(score>value):
           return boy[i]
s = map(rope, [140, 62,90, 10])
print(list(s))
s = map(rope, [140, 62,90, 10])
#[100, 72, 80, 30] 实际的单项成绩

教育部网站-国家学生体质健康标准 http://old.moe.gov.cn/publicfiles/business/htmlfiles/moe/s3273/201407/171692.html