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

2024-06-28 14:58:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个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)

Tags: 函数代码innumberforlencount错误
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数字平方写入的最大数,即:

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

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

https://wiki.python.org/moin/Generators

相关问题 更多 >