【问题标题】:How to make simple for-loop consuming less memory?如何使简单的for循环消耗更少的内存?
【发布时间】:2013-06-25 15:37:10
【问题描述】:
def odd():
    for i in xrange(0, 100):
        if i % 2 == 1:
            print i

我有这个小功能。 我想知道:

  1. 是否有办法让它消耗更少的内存?
  2. 您可以使用哪些工具和技术来有效地衡量和改善内存消耗?

看了下面的问题,我想到了这个问题:odd numbers

【问题讨论】:

  • 为什么是-1?请给出解释:)
  • 你已经在使用 xrange,所以这有帮助,我假设这是在 python 2 中呢?
  • +1:我也想知道,关于 -1。我必须注意,这个循环几乎不消耗内存,如果上限更大,也不会消耗更多。我还想指出,您可以更简单地写xrange(100)if i % 2:
  • 为什么不使用 xrange(1, 100, 2)?这将立即为您提供奇数...
  • 如果你还不知道第 2 部分(如何测量内存消耗),你为什么还要问第 1 部分?

标签: python performance memory-efficient


【解决方案1】:

最近有一个answer on Stackoverflow关于内存消耗测量。

至于循环的内存消耗,它可以忽略不计,并且不依赖于范围的上限,因为 xrange() 并没有真正存储比它将返回的下一个值更多的内容。

【讨论】:

    【解决方案2】:

    不确定这个问题是否实际上是关于内存消耗和提高效率的算法,或者它是否与特定语言以及它如何在后台处理事情有关。

    如果是关于内存消耗和改进解决方案的算法,一个好的解决方法是使用带有一些简单条件的递归(或迭代)解决方案。

    示例而不是遍历循环中的 100 个数字(我不是 python 开发人员,所以我会用 javascript 编写这个简单的解决方案,可以在 chrome 的控制台中轻松测试)你可以尝试这样的事情:

        var iteration = 0;
    var odd = function(val,max){
        iteration++;
        //base case
        if ( val > max ) return;
        if ( val % 2 == 1 ){
            console.log(val);
            odd(val+2,max);
        }else odd(val+1,max);   
    }
    
    odd(0,100);
    console.log("Total iterations: "+iteration);
    

    这只会导致 52 次迭代,而不是 100 次。

    【讨论】:

    • 这个问题有一个 Python 标签,所以它是关于 Python 的。另外,如果只想获得奇数并限制迭代次数,则可以简单地从 1 以 2 为增量进行迭代,如 cmets 之一到原始问题中所述。此外,问题是关于减少内存消耗,而您的递归解决方案使用 O(n) 内存,这比问题的 O(1) 内存差得多。
    猜你喜欢
    • 2016-07-11
    • 2016-07-04
    • 2017-07-17
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多