我整理了以下代码以确定一个数的除数是奇数还是偶数。该代码适用于相对较小的数字,但一旦输入较大的数字(如 9 位数字),它就会挂断。
def divisors(n):
num = len(set([x for x in range(1,n+1) if not divmod(n,x)[1]]))
if (num != 0 and num % 2 == 0):
return 'even'
else:
return 'odd'
我可以做些什么来提高效率?
最佳答案
这是你的问题:
num = len(set([x for x in range(1,n+1) if not divmod(n,x)[1]]))
这会构造一个列表,然后从该列表构造一个集合,然后获取集合的长度。您不需要做任何这些工作(range()
或 xrange()
就此而言,不会产生重复的对象,因此我们不需要集合,sum()
作用于任何可迭代对象,因此您也不需要列表)。当我们讨论这个主题时,divmod(n, x)[1]
只是一种非常复杂的编写 n % x
的方式,并且会额外消耗一点点构造一个元组的内存(因为你把元组扔掉了,它会立即被回收)。这是固定版本:
num = sum(1 for x in xrange(1,n+1) if not n % x)
关于python - 如何优化我的 Python 代码以使用更少的内存执行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36491535/