Python 如何使循环更简单,消耗更少的内存?

Python 如何使循环更简单,消耗更少的内存?,python,performance,memory-efficient,Python,Performance,Memory Efficient,我有这个小功能。 我想知道: 有没有办法让它消耗更少的内存 您可以使用哪些工具和技术来有效地测量和提高内存消耗 在看了以下问题后,我想到了这个问题:最近有一个关于内存消耗测量的问题 至于循环的内存消耗,它可以忽略不计,并且不依赖于范围的上限,因为xrange()实际存储的值不会比它将返回的下一个值多得多。不确定问题的实质是内存消耗和提高效率的算法,还是它与特定语言相关,以及它在后台的工作方式 如果是关于内存消耗和改进解决方案的算法,一个好的解决方法是使用带有一些简单条件的递归(或迭代)解决方案

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

  • 有没有办法让它消耗更少的内存
  • 您可以使用哪些工具和技术来有效地测量和提高内存消耗
  • 在看了以下问题后,我想到了这个问题:

    最近有一个关于内存消耗测量的问题


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

    不确定问题的实质是内存消耗和提高效率的算法,还是它与特定语言相关,以及它在后台的工作方式

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

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

    def odd():
        for i in xrange(0, 100):
            if i % 2 == 1:
                print i
    

    它只需要经过52次迭代,而不是100次。

    为什么是-1?请给出一个解释:)您已经在使用xrange了,所以这很有帮助,我假设这是在Python2中,那么?+1:我也想知道-1。我必须注意,这个循环几乎不消耗内存,如果上限大得多,也不会消耗更多内存。我还想指出,如果I%2:,您可以编写更简单的
    xrange(100)
    。为什么不编写xrange(1100,2)?这会立刻给你奇数…如果你还不知道第2部分(如何测量内存消耗),为什么还要问第1部分?这个问题有一个Python标签,所以是关于Python的。另外,如果你只想得到奇数并限制迭代次数,你可以简单地从1开始以2的增量迭代,正如在对原始问题的一个评论中提到的那样。此外,问题是关于减少内存消耗,递归解决方案使用O(n)内存,这比问题中的O(1)内存差得多。
    
        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);