测试题19
来源:3-1 课程总结
xiaoyuan1
2019-12-17 11:34:47
老师,解析中说,先通过map函数将字符串"23443"转换为数字23443,map函数中传入的函数charToNum是怎么把字符串转换成数字的
再通过reduce函数求各元素累积和,即(((2*10+3)*10+4)*10+4))*10+3=23443,类型为int型,fn
函数传入的一个数字,怎么就按(((2*10+3)*10+4)*10+4))*10+3去计算了,要是传入的是一个列表我能理解,但是传入的是一个数字。
烦请老师指点。
2回答
同学你好:
map(fun, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回。
lst = [a1, a2 ,a3, ......, an]
list(map(fn,lst))=[fn(a1),fn(a2),....,fn(an)]
reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。
例如:
lst = [a1, a2 ,a3, ......, an]
reduce(func, lst) = func(func(func(a1, a2), a3), ......, an)
reduce(fn,map(charToNum,"23443"))
可以将其拆分,先执行map(charToNum,"23443"),再执行reduce(fn,上一步骤的值)。
1、
charToNum函数的作用是返回对应传入参数的字典的值:dict[s]。
字符串是可以遍历的。因此传入的每一个字符会根据该函数方法进行返回。list(map(charToNum,"23443"))
[charToNum("2"),charToNum("3"),...,charToNum("3")]
最后得到的结果就是[2, 3, 4, 4, 3]。
2、
fn函数的作用是实现第一个参数乘以10加第二个参数:x*10+y
同学说fn函数传入的是23443这个数字是错误的理解,传入的是[2, 3, 4, 4, 3]列表每一个元素。
使用reduce(fn,[2, 3, 4, 4, 3])--》fn(fn(fn(fn(2,3),4),4),3)
fn(2,3)=23
fn(23,4)=234
fn(234,4)=2344
fn(2344,3)=23443。
如果我解决了同学的问题,请采纳!学习愉快^_^。
好帮手乔木
2019-12-17
同学你好:
使用map方法得到的是map对象,该对象是可以遍历的。不是int类型(数字)。
map等高阶函数后面的参数要求不是必须是列表,只要是能遍历的对象即可。
如果我解决了同学的问题,请采纳!学习愉快^_^。
相似问题