Python中{}[]的问题 200

如下一段Python代码,将一个str转化为float:fromfunctoolsimportreducedefs2f(n):defstr(n):return{'0':0... 如下一段Python代码,将一个str转化为float:
from functools import reduce
def s2f(n):
def str(n):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,'.': 0}[n]
def fol(x,y):
return (x*10+y)
return reduce(fol,map(str,n))/1000
print('str2float(\'123.456\') =', s2f('123.456'))

结果输出1230456.问题是,{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,'.': 0}[n],n='123.456',这个dict中为什么key值能够分别对应1,2,3等等,而不是key=123.456?
而且,直接输入:
print ({'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,'.': 0}['123.456'])
会报错,为什么呢?
展开
 我来答
cnbubble
2017-06-28 · TA获得超过2607个赞
知道大有可为答主
回答量:1990
采纳率:83%
帮助的人:772万
展开全部
主要是由于reduce函数,和map函数的原因
参考Reduce说明:
Python中的reduce
python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。

在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce.
map的参数也类似,第一个参数是一个函数,第二个参数是一个可迭代对象。

map(str,n) 带入参数处理后会返回 (1,2,3,0,4,5,6),作为reduce的可迭代对象
根据reduce说明,首先1、2传入fol函数,得到1*10+2=12, 结果12和第三个数3再传入fol,得到123,……最终得到1230456,除以1000后应该是1230.456
更多追问追答
追问
你可能没看清问题。我对过程和结果没有疑问。只是,['123.456']不是一个只有一个元素的list吗?dict{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,'.': 0}怎么会认为这个list包括了1,2,3,。,4,5,6这7个元素,从而返回value?
追答
字符串当成列表、元组时,每个字符当成元素
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式