我已经开始编写一些Python代码了。我所拥有的是:
from math import *
def ex(N):
l = []
sum = 0
N = abs(int(N));
for n in range(1,N):
if N % n == 0:
l.append(n)
sum += n
l.append(N)
print ' of '+str(N),l
print 'SUM', (sum+N)
我不知道这是好是坏,但这是我试过的:)
是否可以使用列表理解来复制代码的行为?如果是这样,怎么样?
答案 0 :(得分:5)
l = [n for n in range(1,N+1) if N % n == 0]
total = sum(l)
答案 1 :(得分:4)
您可以使用list-comprehension:
def ex(N):
N = abs(int(N))
l = [n for n in range(1, N + 1) if N % n == 0]
print ' of '+str(N),l
print sum(l)
如果条件(N%n == 0)为真,则将n保持在1到N(包括)范围内的每个n。您将列表保留在l中,然后函数sum计算列表的总和。
使用列表理解是好还是坏取决于你,但它通常被使用,因为它是高效和紧凑的。如果您不需要列表,因为您只需要一个接一个地使用这些值,并且建议只使用一次generators
,因为它们不使用内存。
答案 2 :(得分:4)
非常简单(如果你不需要保留结果,这实际上使用了生成器表达式而不是列表解析)。
def ex(N):
N = abs(int(N))
print 'SUM', sum(n for n in xrange(1, N + 1) if N % n == 0)
如果你关心这个清单,那么:
def ex2(N):
N = abs(int(N))
l = [n for n in xrange(1, N + 1) if N % n == 0]
print ' of '+str(N),l
print 'SUM', sum(l)
您可能会发现列表推导的Dive Into Python 3解释很有用,或者如果您有一些空闲时间,请尝试观看introductory Python tutorial。
答案 3 :(得分:0)
您可以使用list comprehension替换:
for n in range(1,N):
if N % n == 0:
l.append(n)
使用:
[l.append(n) for n in range(1,N) if N % n == 0]
无论好坏,在这种情况下,我不确定。我喜欢在可能的情况下使用它们,但对于更复杂的情况,我有时会选择for
循环以便于阅读。
编辑:抱歉,也许我应该给出一个完整的例子。
def ex(N):
l = []
N = abs(int(N));
[l.append(n) for n in range(1,N) if N % n == 0]
l.append(N)
print l
print sum(l)