我正在尝试完成一个编码挑战,该挑战要求我计算 1 到 X 之间的所有数字,其中最多可以达到 400,000,000,000,000,000
我的方法是遍历一个列表,最后将位数添加到我的结果中,如下所示:
def page_digits(pages):
list_of_pages = list(range(1, pages + 1))
res = 0
for num in list_of_pages:
res += len((str(num)))
return res
但显然创建一个介于 1 和那个大数字之间的每个数字的列表需要大量存储空间,并且运行它会返回“MemoryError Line 2”
我还能怎么做呢?或避免问题
最佳答案
没有理由需要将范围转换为列表。
>>> def page_digits(pages):
... res = 0
... for num in range(1, pages + 1):
... res += len(str(num))
... return res
...
>>> page_digits(100000)
488895
调用 list
构造函数会强制范围中的每个元素单独存储在内存中,但是常规的 range
对象非常节省内存(它只包含 args你在构造时传递了它)同时仍然是可迭代的。
您可能需要将范围转换为列表的唯一原因是改变其中的各个元素(您不能对范围进行此操作)。
关于python - 如何在没有列表的情况下计算非常大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69256649/