【发布时间】:2020-05-11 05:54:09
【问题描述】:
我刚刚开始使用 Python 编程语言。我试图编写一个函数,它可以输入一个列表或多个整数来查找他们的产品。我试图找到前一百万个自然数的乘积,但它显示MemoryError。
def product(*arg):
answer=1
if type(arg) == tuple:
arg=str(arg)
arg=arg.lstrip('[(')
arg=arg.rstrip('],)')
arg=arg.split(',')
for i in arg:
answer*=int(i)
return answer
else:
for i in arg:
answer*=int(i)
return answer
j=range(1,1000000,1)
j=list(j)
print(product(j))
步骤:
- 如果我要将列表传递为 论据
- 现在,在函数中,我尝试通过转换元组来拆分它 字符串。
- 我将生成的字符串转换为列表,然后循环遍历 查找产品的元素
Q1:当我试图找到前百万个自然数的乘积时,如何避免记忆错误?
Q2如何改进这段代码?
【问题讨论】:
-
为什么要将元组转换为字符串并返回,而不是像在 else 语句中那样直接迭代它?
-
当我传递 arg 参数时,它被转换为一个单元素元组。所以,我无法遍历它。
-
然后试试
for i in arg[0]: -
谢谢,
arg[0]以一种我可以直接循环的方式工作。但是求百万数乘积的问题依然存在。 -
对于较小的数字:
math.factorial(1000)(reduce(mul, range(1, 1000 + 1))) 但对于1000_000,答案太大:您可以 use Stirling formula to estimate log of the answer:n*log(n)-n
标签: python python-3.x list function out-of-memory