Python 用列表法求N的除数

Python 用列表法求N的除数,python,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 pr

我已经开始编写一些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)
我不知道这是好是坏,但这是我尝试过的:)


是否可以通过列表理解复制代码的行为?如果是,如何替换?

您可以使用列表理解来替换:

for n in range(1,N):
        if N % n == 0:
            l.append(n)
与:

不管是好是坏,在这种情况下,我不确定。我喜欢在可能的时候使用它们,但对于更复杂的情况,为了可读性,有时我会选择
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)

您可以通过列表理解来完成此操作:

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的n保持在1到n(包括)的范围内。将列表保留在l中,然后函数sum计算列表的和

使用列表理解是好是坏取决于您,但通常使用它是因为它高效且紧凑。如果你不需要一个列表,因为你只需要一个接一个地使用值,并且只推荐一次
生成器,因为它们不使用内存。

非常简单(如果你不需要保留结果,这实际上使用的是生成器表达式而不是列表理解)

l = [n for n in range(1,N+1) if N % n == 0]
total = sum(l)
如果您关心列表,请改为:

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)

您可能会发现列表理解的解释很有用,或者如果您有空闲时间,可以尝试观看。

那么,您知道什么是列表理解吗?您是否费心尝试自己学习它们?是的,我知道一点,但不太多。:)您的代码的意图是什么?特别是当N%N==0时的
行。你还应该阅读第3章和第4章,共20章=>1、2、4、5、10、20。这种列表理解将导致
namererror
None
引用列表。l=[N表示范围内的N(1,N),如果N%N==0]我认为你忘了在列表的末尾添加N。他总是把它加在后面。@SanSS:哎呀,修好了。(N%N始终为0)Nicholas Riley你给了我一个简单易懂的正确答案,以及你分享的好文档。谢谢
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)