测试题19

来源:3-1 课程总结

xiaoyuan1

2019-12-17 11:34:47

http://img.mukewang.com/climg/5df84bf609b232ef06990565.jpg

老师,解析中说,先通过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回答

好帮手乔木

2019-12-17

同学你好:

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]列表每一个元素。

http://img.mukewang.com/climg/5df874430940228806020167.jpg

使用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。

如果我解决了同学的问题,请采纳!学习愉快^_^。


1

好帮手乔木

2019-12-17

同学你好:

使用map方法得到的是map对象,该对象是可以遍历的。不是int类型(数字)。

map等高阶函数后面的参数要求不是必须是列表,只要是能遍历的对象即可。

http://img.mukewang.com/climg/5df853070971bf2c05650461.jpg

如果我解决了同学的问题,请采纳!学习愉快^_^。


0
hiaoyuan1
h 老师,我没说map函数必须是列表,两个问题: 1、解析中说,先通过map函数将字符串"23443"转换为数字23443,map函数中传入的函数charToNum是怎么把字符串转换成数字的 2、解析中说,再通过reduce函数求各元素累积和,即(((2*10+3)*10+4)*10+4))*10+3=23443,类型为int型。 fn函数传入的一个数字23443,怎么就按(((2*10+3)*10+4)*10+4))*10+3去计算了。
h019-12-17
共1条回复

0 学习 · 8160 问题

查看课程