python - 如何优化我的 Python 代码以使用更少的内存执行计算?

标签 python math optimization numbers

我整理了以下代码以确定一个数的除数是奇数还是偶数。该代码适用于相对较小的数字,但一旦输入较大的数字(如 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/

相关文章:

python - 听不到我试图用 pygame 玩的声音

python - 在 python opencv 中添加像素?

python - Python 中 Matlab sprand() 的等价性?

css - css3 matrix3d 第四列背后的精确数学是什么?

java - 优化:通过java中的集合进行双重循环

python - 始终像对待 Django Admin 中的 raw_id_fields 一样对待 ForeignKey 字段

java - 如何获取二维矩阵中一维数组的中心坐标

objective-c - Objective C 数学公式失败

optimization - 什么是桌面 CPU 上的 8 位寄存器?

javascript - Dhtmlx 甘特图解析调用时间 > 20 秒