使用列表理解找到N的除数

时间:2011-04-05 21:04:25

标签: python

我已经开始编写一些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)

我不知道这是好是坏,但这是我试过的:)

是否可以使用列表理解来复制代码的行为?如果是这样,怎么样?

4 个答案:

答案 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)