我有以下代码。
for i in range(1,number):
if (number%i) == 0:
divisorSum += i
如何在python
中只在一行中减少此代码答案 0 :(得分:6)
这是一种方式:
divisorSum += sum(i for i in range(1, number) if number % i == 0)
这是否比原作更可读或更少,是在旁观者的眼中。
我使用+=
来保持代码与您的代码完全相同。如果您在循环之前将divisorSum
初始化为零,则可以将+=
替换为=
并删除初始化。
最后,值得注意的是,您的代码只会计算proper divisors。如果您确实需要包含号码,请使用range(1, number + 1)
。
答案 1 :(得分:1)
您可以尝试使用过滤器:
sum( filter(lambda i: not number % i, range(1,7)) )
请注意,在Python中,0
为False
。因此not 0
是True
。 not number % i
检查您的规定条件。 sum
执行迭代执行的添加操作。