为了账号安全,请及时绑定邮箱和手机立即绑定

我有一个赋值来使用 lambda 和 python 中的映射在一行中总结一个数字的所有数字

我有一个赋值来使用 lambda 和 python 中的映射在一行中总结一个数字的所有数字

qq_遁去的一_1 2021-07-08 13:09:23
此外,我不能将 int 转换为字符串,也不能使用列表理解我一直收到同样的错误,我不知道如何处理它......这是代码:sum_of_digits = lambda a: map(lambda b, c: b + sum_of_digits(c) if a > 10 else None, a % 10, a / 10) if a > 10 else Nonedef main():    print(sum_of_digits(104))if __name__ == '__main__':    main()这是错误:TypeError: argument 2 to map() must support iteration
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

正如其他人指出的那样,您的错误的原因是您的map函数的第二个参数是一个整数a % 10,但它应该是一个可迭代的。

这是一个满足您的问题要求的单行:它创建一个函数,该函数返回一个非负整数的数字之和,并同时使用lambdamap。它还使用intandstr但这并不违反您规定的要求。这是有效的,因为str(a)返回一个字符串,它是数字的数字的可迭代。每个数字是一个 1 个字符的字符串,在求和之前必须将其转换为整数。在map做这种转换。

sum_of_digits = lambda a: sum(map(int, str(a)))


查看完整回答
反对 回复 2021-07-13
?
温温酱

TA贡献1752条经验 获得超4个赞

有一个有趣的小递归版本使用and

sum_of_digits = lambda n: n and n%10 + sum_of_digits(n//10)

如果n为假(即零),则返回n,否则返回最低有效数字和n//10

如果您使用的是 Python 2,则必须 from __future__ import division


查看完整回答
反对 回复 2021-07-13
?
aluckdog

TA贡献1847条经验 获得超7个赞

Map 接受一个函数并将其应用于一些可迭代的事物。你没有给它一个可迭代的东西,只是一个函数。


尝试这样的事情


import math


sum_of_digits = lambda x: sum([int(c) for c in str(x)])


the_value_of_a_specific_digit = lambda x, d: int(x / 10 ** d % 10)

an_iterable_of_number_of_digits = lambda x: range(int(math.log(x, 10))+1)

a_combined_function = lambda x: sum(map(func, iterable))


def main():

    print(sum_of_digits(104))


if __name__ == '__main__':

    main()


查看完整回答
反对 回复 2021-07-13
  • 3 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信