嗨,我有一个辅助装置,可以使用 python 中的 lambda 和 map 将数字的所有数字相加到一行中



此外,我无法将 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 None
def main():
print(sum_of_digits(104))
if __name__ == '__main__':
main()

这是错误:

TypeError: argument 2 to map() must support iteration

(此答案适用于该问题的先前版本,但不符合新的编辑版本的要求。

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

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

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

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()

有一个有趣的小递归版本使用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

最新更新