Python 用列表法求N的除数
我已经开始编写一些Python代码。我得到的是: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
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)