Python 如何改进代码以避免基于内存的错误?

Python 如何改进代码以避免基于内存的错误?,python,out-of-memory,Python,Out Of Memory,我编写了一个python函数largestProduct(n),它返回两个n位数字的乘积的最大值。代码在n中正常运行,直到第3步,但在n>3中显示内存错误。有没有办法改进代码以避免此错误 def largestProduct(n): number_lst = [] prod_lst = [] count = 0 for i in range(10**(n-1),(10**n)): number_lst.append(i) while c

我编写了一个python函数
largestProduct(n)
,它返回两个n位数字的乘积的最大值。代码在
n
中正常运行,直到第3步,但在
n>3
中显示内存错误。有没有办法改进代码以避免此错误

def largestProduct(n):

    number_lst = []
    prod_lst = []
    count = 0
    for i in range(10**(n-1),(10**n)):
        number_lst.append(i) 
    while count!= len(number_lst):
        for i in range(len(number_lst)):
            prod_lst.append(number_lst[count]*number_lst[i])
        count +=1
    prod_set = list(set(prod_lst))

    return max(prod_lst)

<>你应该考虑创建一个生成器函数。最后,您可以迭代函数的输出,该函数只逐个处理每个元素,而不是将整个列表保存在内存中


<> < /p> 你应该考虑创建生成器函数。最后,您可以迭代函数的输出,该函数只逐个处理每个元素,而不是将整个列表保存在内存中


请参见

嗯,您不需要任何存储来循环您需要的内容:

def largestProduct(n):
    range_low = 10**(n-1)
    range_high = 10**n
    largest = 0
    # replace xrange with range for Python 3.x
    for i in xrange(range_low, range_high):
        for j in xrange(range_low, range_high):
            largest = max(largest, i*j)
    return largest
但你为什么要这么做?两个n长数字的最大乘积始终是您可以用n个数字的平方写入的最大数字,即:

def largestProduct(n):
    return (10**n-1)**2

您不需要任何存储来循环您需要的内容:

def largestProduct(n):
    range_low = 10**(n-1)
    range_high = 10**n
    largest = 0
    # replace xrange with range for Python 3.x
    for i in xrange(range_low, range_high):
        for j in xrange(range_low, range_high):
            largest = max(largest, i*j)
    return largest
但你为什么要这么做?两个n长数字的最大乘积始终是您可以用n个数字的平方写入的最大数字,即:

def largestProduct(n):
    return (10**n-1)**2

首先,没有必要将整个列表保存在内存中。首先,没有必要将整个列表保存在内存中。非常感谢,这非常有意义,老实说,我的主要目的不是获得最大的产品;我应该写一些不同的函数,这只是函数的一部分,非常感谢,这很有意义,老实说,我的主要目的不是为了得到最大的产品;我应该写一些不同的函数,这只是函数的一部分