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