我正在编写一个循环遍历数字列表的函数,并返回每个数字的除数之和的列表。我正在尝试稍微精简我的函数,同时学习 map(lambda..)。
def DoWork(nums):
sums = []
for n in nums:
divisors = []
map(lambda i: divisors.append(i) if not (n%i), range(1,n+1))
sums.append(sum(divisors))
return sums
不过,关于 map() 行中的第一个 ,,我遇到了语法错误。
请您参考如下方法:
通常,我们使用 map() 的情况是我们有一个事物序列 [1] 并希望通过应用一个函数将其转换为另一个长度相同的序列每个元素。
您仍然可以使用它来求除数之和,但我认为它不是最合适的工具。
相反,让我从稍微不同的角度向您展示如何将 map 和 lambda 应用于您的问题。
首先,让我们重写您的函数以使用列表理解:
def DoWork(nums):
sums = []
for n in nums:
divisors = [i for i in range(1, n+1) if not n % i]
sums.append(sum(divisors))
return sums
现在观察 divisors 列表是不必要的并且可以消除:
def DoWork(nums):
sums = []
for n in nums:
sums.append(sum(i for i in range(1, n+1) if not n % i))
return sums
现在我们可以轻松地将整个函数转换为对 map() 的单个调用:
def DoWork(nums):
return map(lambda n: sum(i for i in range(1, n+1) if not n % i), nums)
[1] map() 也可用于通过重复应用相同的函数将多个 序列(通常具有相同的长度)转换为单个序列跨输入序列。
