在Python的reduce函数中使用ord()时出错

2024-05-20 00:04:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有以下reduce函数,它应该返回字符串中所有字符的ASCII值之和。例如,对于字符串“BOY”,reduce函数应该返回234。在

reduce(lambda x,y:ord(x)+ord(y),list("BOY"))

但是我得到了以下错误:

^{pr2}$

我的代码有什么问题?在


Tags: lambda函数字符串代码reduce错误ascii字符
3条回答

这应该是

>>> reduce(lambda x, y: x + ord(y), "BOY", 0)
234

lambda函数的左操作数x将始终是上一次调用该函数的结果,因此它是一个整数。我们需要提供一个起始值0,但不需要将字符串转换为列表字符串本身是可读取的。在

如果按照Guido's recommendation to write the accumulation loop explicitly进行操作,则可以避免此问题:

^{pr2}$

为什么不sum(map(ord, "BOY"))?在

reduce(lambda x,y:ord(x)+ord(y),list("BOY"))

想想这是如何减少的:

^{pr2}$

什么是ord(145) + ord('Y')?这是个错误。在

其他人建议:

reduce(lambda x, y: x + ord(y), "BOY", 0)

减少如下:

0 'B' 'O' 'Y'
66 'O' 'Y'
145 'Y'
234

我建议

sum(map(ord, "BOY"))

相关问题 更多 >